From f0c3d179a8aaa8b0ddb32105eb382508df87b307 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 21 Aug 2024 15:14:56 +0000 Subject: [PATCH] build based on 8f1d3a7 --- stable | 2 +- v0.9 | 2 +- v0.9.2/.documenter-siteinfo.json | 1 + v0.9.2/assets/documenter.js | 898 +++++++++++++ v0.9.2/assets/logo.svg | 1418 +++++++++++++++++++++ v0.9.2/assets/themes/documenter-dark.css | 7 + v0.9.2/assets/themes/documenter-light.css | 9 + v0.9.2/assets/themeswap.js | 84 ++ v0.9.2/assets/warner.js | 52 + v0.9.2/developer/contributing.html | 2 + v0.9.2/developer/roadmap.html | 2 + v0.9.2/developer/style.html | 4 + v0.9.2/index.html | 11 + v0.9.2/installation.html | 4 + v0.9.2/manual/fileformat.html | 183 +++ v0.9.2/manual/formulations.html | 123 ++ v0.9.2/manual/quickguide.html | 34 + v0.9.2/manual/storage.html | 84 ++ v0.9.2/reference/base.html | 2 + v0.9.2/reference/constants.html | 2 + v0.9.2/reference/constraints.html | 470 +++++++ v0.9.2/reference/data_models.html | 71 ++ v0.9.2/reference/formulations.html | 2 + v0.9.2/reference/internal.html | 134 ++ v0.9.2/reference/objectives.html | 42 + v0.9.2/reference/problems.html | 379 ++++++ v0.9.2/reference/variables.html | 2 + v0.9.2/search_index.js | 3 + v0.9.2/siteinfo.js | 1 + v0.9.2/tutorials/BeginnersGuide.html | 131 ++ versions.js | 2 +- 31 files changed, 4158 insertions(+), 3 deletions(-) create mode 100644 v0.9.2/.documenter-siteinfo.json create mode 100644 v0.9.2/assets/documenter.js create mode 100644 v0.9.2/assets/logo.svg create mode 100644 v0.9.2/assets/themes/documenter-dark.css create mode 100644 v0.9.2/assets/themes/documenter-light.css create mode 100644 v0.9.2/assets/themeswap.js create mode 100644 v0.9.2/assets/warner.js create mode 100644 v0.9.2/developer/contributing.html create mode 100644 v0.9.2/developer/roadmap.html create mode 100644 v0.9.2/developer/style.html create mode 100644 v0.9.2/index.html create mode 100644 v0.9.2/installation.html create mode 100644 v0.9.2/manual/fileformat.html create mode 100644 v0.9.2/manual/formulations.html create mode 100644 v0.9.2/manual/quickguide.html create mode 100644 v0.9.2/manual/storage.html create mode 100644 v0.9.2/reference/base.html create mode 100644 v0.9.2/reference/constants.html create mode 100644 v0.9.2/reference/constraints.html create mode 100644 v0.9.2/reference/data_models.html create mode 100644 v0.9.2/reference/formulations.html create mode 100644 v0.9.2/reference/internal.html create mode 100644 v0.9.2/reference/objectives.html create mode 100644 v0.9.2/reference/problems.html create mode 100644 v0.9.2/reference/variables.html create mode 100644 v0.9.2/search_index.js create mode 100644 v0.9.2/siteinfo.js create mode 100644 v0.9.2/tutorials/BeginnersGuide.html diff --git a/stable b/stable index 7f7306b..d61de99 120000 --- a/stable +++ b/stable @@ -1 +1 @@ -v0.9.1 \ No newline at end of file +v0.9.2 \ No newline at end of file diff --git a/v0.9 b/v0.9 index 7f7306b..d61de99 120000 --- a/v0.9 +++ b/v0.9 @@ -1 +1 @@ -v0.9.1 \ No newline at end of file +v0.9.2 \ No newline at end of file diff --git a/v0.9.2/.documenter-siteinfo.json b/v0.9.2/.documenter-siteinfo.json new file mode 100644 index 0000000..b2c52bd --- /dev/null +++ b/v0.9.2/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-08-21T15:14:52","documenter_version":"1.1.2"}} \ No newline at end of file diff --git a/v0.9.2/assets/documenter.js b/v0.9.2/assets/documenter.js new file mode 100644 index 0000000..9581d40 --- /dev/null +++ b/v0.9.2/assets/documenter.js @@ -0,0 +1,898 @@ +// 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', + 'minisearch': 'https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.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" + ] + }, + "mathjax": { + "exports": "MathJax" + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['mathjax'], function(MathJax) { +MathJax.Hub.Config({ + "jax": [ + "input/TeX", + "output/HTML-CSS", + "output/NativeMML" + ], + "TeX": { + "equationNumbers": { + "autoNumber": "AMS" + } + }, + "tex2jax": { + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "processEscapes": true + }, + "config": [ + "MMLorHTML.js" + ], + "extensions": [ + "MathMenu.js", + "MathZoom.js", + "TeX/AMSmath.js", + "TeX/AMSsymbols.js", + "TeX/autobold.js", + "TeX/autoload-all.js" + ] +} +); + +}) +//////////////////////////////////////////////////////////////////////////////// +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 () { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + + 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(); + } 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(); + } + + $(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', 'minisearch'], function($, minisearch) { + +// In general, most search related things will have "search" as a prefix. +// To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +let results = []; +let timer = undefined; + +let data = documenterSearchIndex["docs"].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 search 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@!]+$/, ""); + } + + 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: { + boost: { title: 100 }, + fuzzy: 2, + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + tokenize: (string) => string.split(/[\s\-\.]+/), + }, +}); + +index.addAll(data); + +let filters = [...new Set(data.map((x) => x.category))]; +var modal_filters = make_modal_body_filters(filters); +var filter_results = []; + +$(document).on("keyup", ".documenter-search-input", function (event) { + // Adding a debounce to prevent disruptions from super-speed typing! + debounce(() => update_search(filter_results), 300); +}); + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + $(this).removeClass("search-filter-selected"); + } else { + $(this).addClass("search-filter-selected"); + } + + // Adding a debounce to prevent disruptions from crazy clicking! + debounce(() => get_filters(), 300); +}); + +/** + * A debounce function, takes a function and an optional timeout in milliseconds + * + * @function callback + * @param {number} timeout + */ +function debounce(callback, timeout = 300) { + clearTimeout(timer); + timer = setTimeout(callback, timeout); +} + +/** + * Make/Update the search component + * + * @param {string[]} selected_filters + */ +function update_search(selected_filters = []) { + let initial_search_body = ` +
Type something to get started!
+ `; + + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + results = index.search(querystring, { + filter: (result) => { + // Filtering results + if (selected_filters.length === 0) { + return result.score >= 1; + } else { + return ( + result.score >= 1 && selected_filters.includes(result.category) + ); + } + }, + }); + + let search_result_container = ``; + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + results.forEach(function (result) { + if (result.location) { + // Checking for duplication of results for the same page + if (!links.includes(result.location)) { + search_results += make_search_result(result, querystring); + count++; + } + + links.push(result.location); + } + }); + + let result_count = `
${count} result(s)
`; + + 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 { + filter_results = []; + modal_filters = make_modal_body_filters(filters, filter_results); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(initial_search_body); + } +} + +/** + * Make the modal filter html + * + * @param {string[]} filters + * @param {string[]} selected_filters + * @returns string + */ +function make_modal_body_filters(filters, selected_filters = []) { + let str = ``; + + filters.forEach((val) => { + if (selected_filters.includes(val)) { + str += `${val}`; + } else { + str += `${val}`; + } + }); + + let filter_html = ` +
+ Filters: + ${str} +
+ `; + + return filter_html; +} + +/** + * 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})`; + } + + let textindex = new RegExp(`\\b${querystring}\\b`, "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 + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`\\b${querystring}\\b`, "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 = ` + +
+
${result.title}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; +} + +/** + * Get selected filters, remake the filter html and lastly update the search modal + */ +function get_filters() { + let ele = $(".search-filters .search-filter-selected").get(); + filter_results = ele.map((x) => $(x).text().toLowerCase()); + modal_filters = make_modal_body_filters(filters, filter_results); + update_search(filter_results); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +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($) { + +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/v0.9.2/assets/logo.svg b/v0.9.2/assets/logo.svg new file mode 100644 index 0000000..29503f6 --- /dev/null +++ b/v0.9.2/assets/logo.svg @@ -0,0 +1,1418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Power Models + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.9.2/assets/themes/documenter-dark.css b/v0.9.2/assets/themes/documenter-dark.css new file mode 100644 index 0000000..ec054ec --- /dev/null +++ b/v0.9.2/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:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !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-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !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-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !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-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !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:#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:#024c7d;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-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}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:#073;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:#008438;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-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}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:#ad8100;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-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}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:#9e1b0d;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-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}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:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}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:#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%, #343c3d 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%, #343c3d 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%, #343c3d 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%, #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:#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 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:#024c7d;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:#ebf7ff;color:#0e9dfb}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:#008438;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:#ebfff3;color:#00eb64}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:#ad8100;color:#fff}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:#fffaeb;color:#d19c00}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:#9e1b0d;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:#fdeeec;color:#ec311d}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:#024c7d}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(2,76,125,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:#008438}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(0,132,56,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:#ad8100}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(173,129,0,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:#9e1b0d}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(158,27,13,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:#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:.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:#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:#073;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:.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:#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.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:#ebf7ff}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:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}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:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}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:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}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:#ec311d}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:#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;-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:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}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:#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{color:#024c7d !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:#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{color:#008438 !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:#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{color:#ad8100 !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:#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{color:#9e1b0d !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:#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: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:#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:.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:#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 .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:1px;border-color:#5e6d6f;border-radius:.4em;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:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}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;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}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;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}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;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}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;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}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;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;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:1px solid #5e6d6f;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}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 #9e1b0d;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: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 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}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 .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:whitesmoke;background-color:#33415580;border-radius:0.6rem}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/v0.9.2/assets/themes/documenter-light.css b/v0.9.2/assets/themes/documenter-light.css new file mode 100644 index 0000000..1262ec5 --- /dev/null +++ b/v0.9.2/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:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !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-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !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-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:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !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-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !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:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;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:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;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-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.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:#22c35b;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-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.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:#ffda4a;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:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;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-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.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:#da0b00;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-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.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:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.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:#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%, #ededed 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%, #ededed 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%, #ededed 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%, #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:#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 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:#209cee;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:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;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:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.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:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;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:#ffeceb;color:#f50c00}.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:#209cee}.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(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.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(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.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(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.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(218,11,0,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:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.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:#ffd83e}.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:.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:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;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:#1190e3;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:#ffda4a;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:#ffd83e;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:.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:#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.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:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.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:#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:#1190e3;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:#1190e3;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:#1190e3;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:#ffd83e;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:#ffd83e;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:#ffd83e;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 #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:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.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:#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:#1190e3;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:#209cee !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:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 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{color:#22c35b !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:#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:#ffd83e;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{color:#ffdd57 !important;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, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 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{color:#da0b00 !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:#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: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:#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:.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:#def0fc;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:#bdf4d1;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:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;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.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:1px solid #dbdbdb;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}.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:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;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: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:#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}#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/v0.9.2/assets/themeswap.js b/v0.9.2/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.9.2/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/v0.9.2/assets/warner.js b/v0.9.2/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.9.2/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/v0.9.2/developer/contributing.html b/v0.9.2/developer/contributing.html new file mode 100644 index 0000000..d3b47d5 --- /dev/null +++ b/v0.9.2/developer/contributing.html @@ -0,0 +1,2 @@ + +Contributing · PowerModelsITD.jl

Contributing

Pull Requests

All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.

Every PR to PowerModelsITD should strive to meet the following guidelines.

PR Title

  • Should be concise and clear, describing in a phrase the content of the PR
  • Should include a prefix that describes the primary type of the PR
    • ADD: feature addition
    • FIX: bugfix
    • REF: refactor
    • UPD: updates to code for e.g. version bumps of dependencies
    • STY: style changes, no changes to function names, added features, etc.
    • DOC: documentation-only additions/changes
    • RM: dead code removal

PR Body

  • If the change is breaking, it should be clearly stated up front
  • The purpose of this PR should be clearly stated right away
  • Major changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR
  • Any associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged

PR Code

  • An entry should be added to CHANGELOG.md for every PR
  • Documentation should be updated (See Documentation section above for guidelines)
  • Unit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included
  • Code should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)

Versions

PowerModelsITD follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.

Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsITD reaches v1.0.0, we will adhere strictly to the SemVer convention.

Branch Management

The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.

Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.

Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.

Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.

diff --git a/v0.9.2/developer/roadmap.html b/v0.9.2/developer/roadmap.html new file mode 100644 index 0000000..de88750 --- /dev/null +++ b/v0.9.2/developer/roadmap.html @@ -0,0 +1,2 @@ + +Roadmap · PowerModelsITD.jl
diff --git a/v0.9.2/developer/style.html b/v0.9.2/developer/style.html new file mode 100644 index 0000000..74365d7 --- /dev/null +++ b/v0.9.2/developer/style.html @@ -0,0 +1,4 @@ + +Style Guide · PowerModelsITD.jl

Style Conventions

In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsDistribution, etc.) with some additions specific to PowerModelsITD.

Functions

Function additions should meeting the following criteria:

  • All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_files or constraint_boundary_voltage_angle; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.
  • All functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsITD). Public functions should have a detailed docstring instructing on usage
  • All functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclaimation point
  • All function arguments, including keyword arguments, should have their types specified.
  • Private functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.
  • Functions should be separated by two blank lines
"this function demonstrates how an internal, in-place data altering function should be defined"
+function _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])
+end

Types & Enums

When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:

  • Prefer to use Vector{T} instead of Array{T,1}
  • Prefer to use Matrix{T} instead of Array{T,2}
  • Enums must be added to the JSON parser when introduced

Constants

Whenever possible, const should be used to eliminate unnecesary re-evaluations of code, and every const should have a docstring, whether internal or public.

JuMP Variables and Constraints

For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:

<jump macro id>(_<phase variant>)_<comp short name>_<quantity name>(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)

in the interest of intuitive names for users, the following special cases are also acceptable,

  • _power_real -(can be replaced with)-> _active
  • _power_imaginary -(can be replaced with)-> _reactive

Formulation Styles

  • All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy
  • Formulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.

Problem Specification Styles

  • If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)
  • If a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and solve_ functions should be created that do not collide with existing problem specification functions

Metaprogramming

In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.

Markdown

Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).

File Structure

It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general

  • src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation
  • src/form contains formulation specific variable and constraint functions, organized under separate files for different formulations
  • src/prob contains problem specification-related functions, organized under separate files for different problem specifications
  • src/io contains all of the tools to parse and save files
  • docs/src contains all source markdown files for the documentation
  • examples contains Jupyter notebooks with walkthroughs of PowerModelsITD for new users
  • test/data contains all data related to example and unit test cases
  • test/ contains files with unit test cases

Dependencies (Project.toml)

All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.

All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]

The Manifest.toml should not be included in the repo.

diff --git a/v0.9.2/index.html b/v0.9.2/index.html new file mode 100644 index 0000000..57722f7 --- /dev/null +++ b/v0.9.2/index.html @@ -0,0 +1,11 @@ + +Introduction · PowerModelsITD.jl

PowerModelsITD Logo

What is PowerModelsITD.jl?

PowerModelsITD.jl is a Julia/JuMP-based package for modeling and optimizing integrated transmission-distribution (ITD) power networks.

Resources for Getting Started

Read the Installation Guide.

Read the Quickstart Guide.

Read the File Formats Guide.

Read the introductory tutorial Introduction to PowerModelsITD.jl.

How the documentation is structured

The following is a high-level overview of how our documentation is structured. There are three primary sections:

  • The Manual contains detailed documentation for certain aspects of PowerModelsITD.jl, such as the Data Models, the Network Formulations, or the Optimization Problem Specifications.

  • Tutorials contains working examples of how to use PowerModelsITD.jl. Start here if you are new to PowerModelsITD.jl.

  • The API Reference contains a complete list of the functions you can use in PowerModelsITD.jl. Look here if you want to know how to use a particular function.

Citing PowerModelsITD.jl

If you find PowerModelsITD useful for your work, we kindly request that you cite the following publication:

@article{ospina2024modeling,
+  author={Ospina, Juan and Fobes, David M. and Bent, Russell and Wächter, Andreas},
+  journal={IEEE Transactions on Power Systems},
+  title={Modeling and Rapid Prototyping of Integrated Transmission-Distribution OPF Formulations With PowerModelsITD.jl},
+  year={2024},
+  volume={39},
+  number={1},
+  pages={172-185},
+  keywords={Optimization;Reactive power;Voltage;Upper bound;Distribution networks;Steady-state;Transportation;AC optimal power flow;Julia language;nonlinear optimization;open-source},
+  doi={10.1109/TPWRS.2023.3234725}}

Acknowledgments

This code has been developed with the support of the Grant: "Optimized Resilience for Distribution and Transmission Systems" funded by the U.S. Department of Energy (DOE) Office of Electricity (OE) Advanced Grid Modeling (AGM) Research Program under program manager Ali Ghassemian. The research work conducted at Los Alamos National Laboratory is done under the auspices of the National Nuclear Security Administration of the U.S. Department of Energy under Contract No. 89233218CNA000001. The primary developers are Juan Ospina (@juanjospina) and David Fobes (@pseudocubic).

License

This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.

diff --git a/v0.9.2/installation.html b/v0.9.2/installation.html new file mode 100644 index 0000000..b3e1cfc --- /dev/null +++ b/v0.9.2/installation.html @@ -0,0 +1,4 @@ + +Installation Guide · PowerModelsITD.jl

Installation Guide

From Julia, PowerModelsITD.jl is installed using the built-in package manager:

import Pkg
+Pkg.add("PowerModelsITD")

Or, within the Julia REPL:

]add PowerModelsITD

Installing an Optimizer

PowerModelsITD.jl depends on optimizers to solve Optimization problems, e.g., solve_opfitd. The table below lists the optimizer packages that have been tested with PowerModelsITD.jl, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.

Install an optimizer using the Julia Package Manager, e.g.,

import Pkg
+Pkg.add("Ipopt")

Known Working Optimizers

The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.

SolverJulia PackageInstallationLicenseSupports
Artelys KnitroKNITRO.jlManualComm.(MI)LP, (MI)SOCP, (MI)NLP
CbcCbc.jlEPL(MI)LP
CPLEXCPLEX.jlManualComm.(MI)LP, (MI)SOCP
GurobiGurobi.jlManualComm.(MI)LP, (MI)SOCP
IpoptIpopt.jlEPLLP, QP, NLP
Juniper.jlJuniper.jlMIT(MI)SOCP, (MI)NLP
SCSSCS.jlMITLP, SOCP, SDP

Where:

  • LP = Linear programming
  • QP = Quadratic programming
  • SOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)
  • NLP = Nonlinear programming
  • SDP = Semidefinite programming
  • (MI)XXX = Mixed-integer equivalent of problem type XXX

For a complete list of JuMP supported optimizers, see JuMP Documentation.

Unsatisfiable requirements detected

Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?

The Pkg documentation has a section on how to understand and manage these conflicts.

diff --git a/v0.9.2/manual/fileformat.html b/v0.9.2/manual/fileformat.html new file mode 100644 index 0000000..7a3da9a --- /dev/null +++ b/v0.9.2/manual/fileformat.html @@ -0,0 +1,183 @@ + +File Formats · PowerModelsITD.jl

File Formats Guide

In this section, we will give a brief introduction to the file formats supported in PowerModelsITD.jl. Place special attention at the Boundary section to understand how the boundary linking file must be formatted and how the auto_rename=true option works.

File Formats Supported

  • Transmission: Matpower ".m" and PTI ".raw" files (PSS(R)E v33 specification)
  • Distribution: OpenDSS ".dss" files
  • Boundary: JSON ".json" files

Transmission System

  • Matpower (".m")
function mpc = case5
+mpc.version = '2';
+mpc.baseMVA = 100.0;
+
+%% bus data
+%	bus_i	type	Pd	Qd	Gs	Bs	area	Vm	Va	baseKV	zone	Vmax	Vmin
+mpc.bus = [
+	1	 2	 0.0	 0.0	 0.0	 0.0	 1	    1.07762	    2.80377	 230.0	 1	    1.10000	    0.90000;
+	2	 1	 300.0	 98.61	 0.0	 0.0	 1	    1.08407	   -0.73465	 230.0	 1	    1.10000	    0.90000;
+	3	 2	 300.0	 98.61	 0.0	 0.0	 1	    1.10000	   -0.55972	 230.0	 1	    1.10000	    0.90000;
+	4	 3	 390.0	 131.47	 0.0	 0.0	 1	    1.06414	    0.00000	 230.0	 1	    1.10000	    0.90000;
+	5	 1	 8.0	 1.2	 0.0	 0.0	 1	    1.00000	    0.00000	 230.0	 1	    1.10000	    0.90000;
+	10	 2	 0.0	 0.0	 0.0	 0.0	 1	    1.06907	    3.59033	 230.0	 1	    1.10000	    0.90000;
+];
+
+%% generator data
+%	bus	Pg	Qg	Qmax	Qmin	Vg	mBase	status	Pmax	Pmin
+mpc.gen = [
+	1	 40.0	 30.0	 30.0	 -30.0	 1.07762	 100.0	 1	 40.0	 0.0;
+	1	 170.0	 127.5	 127.5	 -127.5	 1.07762	 100.0	 1	 170.0	 0.0;
+	3	 324.498	 390.0	 390.0	 -390.0	 1.1	 100.0	 1	 520.0	 0.0;
+	4	 0.0	 -10.802	 150.0	 -150.0	 1.06414	 100.0	 1	 200.0	 0.0;
+	10	 470.694	 -165.039	 450.0	 -450.0	 1.06907	 100.0	 1	 600.0	 0.0;
+];
+
+%% generator cost data
+%	2	startup	shutdown	n	c(n-1)	...	c0
+mpc.gencost = [
+	2	 0.0	 0.0	 3	   0.000000	  14.000000	   0.000000	   2.000000;
+	2	 0.0	 0.0	 3	   0.000000	  15.000000	   0.000000	   2.000000;
+	2	 0.0	 0.0	 3	   0.000000	  30.000000	   0.000000	   2.000000;
+	2	 0.0	 0.0	 3	   0.000000	  40.000000	   0.000000	   2.000000;
+	2	 0.0	 0.0	 3	   0.000000	  10.000000	   0.000000	   2.000000;
+];
+
+%% branch data
+%	fbus	tbus	r	x	b	rateA	rateB	rateC	ratio	angle	status	angmin	angmax
+mpc.branch = [
+	1	 2	 0.00281	 0.0281	 0.00712	 400.0	 400.0	 400.0	 0.0	  0.0	 1	 -30.0	 30.0;
+	1	 4	 0.00304	 0.0304	 0.00658	 426	 426	 426	 0.0	  0.0	 1	 -30.0	 30.0;
+	1	 10	 0.00064	 0.0064	 0.03126	 426	 426	 426	 0.0	  0.0	 1	 -30.0	 30.0;
+	2	 3	 0.00108	 0.0108	 0.01852	 426	 426	 426	 0.0	  0.0	 1	 -30.0	 30.0;
+	3	 4	 0.00297	 0.0297	 0.00674	 426	 426	 426	 1.05	  1.0	 1	 -30.0	 30.0;
+	4	 10	 0.00297	 0.0297	 0.00674	 240.0	 240.0	 240.0	 0.0	  0.0	 1	 -30.0	 30.0;
+	2	 5	 0.00297	 0.0297	 0.00674	 426	 426	 426	 0.0	  0.0	 1	 -30.0	 30.0;
+];
+
  • PSS(R)E v33 specification (".raw")
 0,    100.00, 33, 0, 0, 60.00
+tests an angle shifting transformer
+tests two winding transformer status
+    1,'1', 230.0000,2,   1,   1,   1,1.00000000,   2.803770, 1.10000, 0.90000, 1.10000, 0.90000
+    2,'2', 230.0000,1,   1,   1,   1,1.08406997,  -0.734650, 1.10000, 0.90000, 1.10000, 0.90000
+    3,'3', 230.0000,2,   1,   1,   1,1.00000000,  -0.559720, 1.10000, 0.90000, 1.10000, 0.90000
+    4,'4', 230.0000,3,   1,   1,   1,1.06413996,   0.000000, 1.10000, 0.90000, 1.10000, 0.90000
+    5,'5', 230.0000,1,   1,   1,   1,1.00000000,   0.000000, 1.10000, 0.90000, 1.10000, 0.90000
+   10,'10', 230.0000,2,   1,   1,   1,1.00000000,   3.590330, 1.10000, 0.90000, 1.10000, 0.90000
+0 / END OF BUS DATA, BEGIN LOAD DATA
+    2,'1',1,   1,   1,   300.000,    98.610,     0.000,     0.000,     0.000,     0.000,   1,1
+    3,'1',1,   1,   1,   300.000,    98.610,     0.000,     0.000,     0.000,     0.000,   1,1
+    4,'1',1,   1,   1,   390.000,   131.470,     0.000,     0.000,     0.000,     0.000,   1,1
+    5,'1',1,   1,   1,   8.00000,   1.20000,     0.000,     0.000,     0.000,     0.000,   1,1
+0 / END OF LOAD DATA, BEGIN FIXED SHUNT DATA
+0 / END OF FIXED SHUNT DATA, BEGIN GENERATOR DATA
+    1,'1',    40.000,    30.000,    30.000,   -30.000,1.07762,    0,   100.000,   0.00000,   1.00000,   0.00000,   0.00000,1.00000,1,  100.0,    40.000,     0.000,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,0, 1.0000
+    1,'2',   170.000,   127.500,   127.500,  -127.500,1.07762,    0,   100.000,   0.00000,   1.00000,   0.00000,   0.00000,1.00000,1,  100.0,   170.000,     0.000,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,0, 1.0000
+    3,'1',   324.498,   390.000,   390.000,  -390.000,1.10000,    0,   100.000,   0.00000,   1.00000,   0.00000,   0.00000,1.00000,1,  100.0,   520.000,     0.000,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,0, 1.0000
+    4,'1',     0.000,   -10.802,   150.000,  -150.000,1.06414,    0,   100.000,   0.00000,   1.00000,   0.00000,   0.00000,1.00000,1,  100.0,   200.000,     0.000,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,0, 1.0000
+   10,'1',   470.694,  -165.039,   450.000,  -450.000,1.06907,    0,   100.000,   0.00000,   1.00000,   0.00000,   0.00000,1.00000,1,  100.0,   600.000,     0.000,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,0, 1.0000
+0 / END OF GENERATOR DATA, BEGIN BRANCH DATA
+     1,     2,'1',2.81000E-3,2.81000E-2,7.12000E-3, 400.00, 400.00, 400.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+     1,     4,'1',3.04000E-3,3.04000E-2,6.58000E-3, 426.00, 426.00, 426.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+     1,    10,'1',6.40000E-4,6.40000E-3,3.12600E-2, 426.00, 426.00, 426.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+     2,     3,'1',1.08000E-3,1.08000E-2,1.85200E-2, 426.00, 426.00, 426.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+     3,     4,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00,  1.05000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+     4,    10,'1',2.97000E-3,2.97000E-2,6.74000E-3, 240.00, 240.00, 240.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+     2,     5,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00,  0.00000,  0.00000,  0.00000,  0.00000,1,1,   0.0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000
+0 / END OF BRANCH DATA, BEGIN TRANSFORMER DATA
+     4,     3,    0,'1 ',0,1,1,0.00000E0,6.74000E-3,2,'            ',1,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,'            '
+2.97000E-3,2.97000E-2, 100.00
+1.050000,230.000,  -1.000, 426.00, 426.00, 426.00,-3,     0,   30.00,  -30.00,  150.00,   51.00,9601, 0, 0.00000, 0.00000,  0.000
+1.000000,230.000
+     3,     4,    0,'2 ',1,0,1,0.00000E0,6.74000E-3,2,'            ',1,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,'            '
+2.97000E-3,2.97000E-2, 100.00
+1.050000,230.000,   1.000, 426.00, 426.00, 426.00,-3,     0,   30.00,  -30.00,  150.00,   51.00,9601, 0, 0.00000, 0.00000,  0.000
+1.000000,230.000
+     3,     4,    0,'2 ',1,1,0,0.00000E0,6.74000E-3,2,'            ',0,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,'            '
+2.97000E-3,2.97000E-2, 100.00
+1.050000,230.000,   1.000, 426.00, 426.00, 426.00,-3,     0,   30.00,  -30.00,  150.00,   51.00,9601, 0, 0.00000, 0.00000,  0.000
+1.000000,230.000
+     3,     4,    0,'2 ',1,1,1,0.00000E0,6.74000E-3,2,'            ',2,   1,1.0000,   0,1.0000,   0,1.0000,   0,1.0000,'            '
+2.97000E-3,2.97000E-2, 100.00
+1.050000,230.000,   1.000, 426.00, 426.00, 426.00,-3,     0,   30.00,  -30.00,  150.00,   51.00,9601, 0, 0.00000, 0.00000,  0.000
+1.000000,230.000
+0 / END OF TRANSFORMER DATA, BEGIN AREA DATA
+   1,    0,     0.000,     1.000,'1           '
+0 / END OF AREA DATA, BEGIN TWO-TERMINAL DC DATA
+0 / END OF TWO-TERMINAL DC DATA, BEGIN VOLTAGE SOURCE CONVERTER DATA
+0 / END OF VOLTAGE SOURCE CONVERTER DATA, BEGIN IMPEDANCE CORRECTION DATA
+0 / END OF IMPEDANCE CORRECTION DATA, BEGIN MULTI-TERMINAL DC DATA
+0 / END OF MULTI-TERMINAL DC DATA, BEGIN MULTI-SECTION LINE DATA
+0 / END OF MULTI-SECTION LINE DATA, BEGIN ZONE DATA
+   1,'1       '
+0 / END OF ZONE DATA, BEGIN INTER-AREA TRANSFER DATA
+0 / END OF INTER-AREA TRANSFER DATA, BEGIN OWNER DATA
+    1,'1'
+0 / END OF OWNER DATA, BEGIN FACTS CONTROL DEVICE DATA
+0 / END OF FACTS CONTROL DEVICE DATA, BEGIN SWITCHED SHUNT DATA
+0 /END OF SWITCHED SHUNT DATA, BEGIN GNE DEVICE DATA
+0 /END OF GNE DEVICE DATA
+Q

Distribution System

  • OpenDSS (".dss")
New Circuit.3bus_bal
+!  define a really stiff source
+~ basekv=230 pu=1.00 MVAsc3=200000 MVAsc1=210000
+
+! Substation Transformer
+New Transformer.SubXF Phases=3 Windings=2 Xhl=0.01
+~ wdg=1 bus=sourcebus conn=wye kv=230   kva=25000    %r=0.0005
+~ wdg=2 bus=Substation   conn=wye kv=13.8  kva=25000   %r=0.0005
+
+!Define Linecodes
+New linecode.556MCM nphases=3 basefreq=60  ! ohms per 5 mile
+~ rmatrix = ( 0.1000 | 0.0400    0.1000 |  0.0400    0.0400    0.1000)
+~ xmatrix = ( 0.0583 |  0.0233    0.0583 | 0.0233    0.0233    0.0583)
+~ cmatrix = (50.92958178940651  | -0  50.92958178940651 | -0 -0 50.92958178940651  ) ! small capacitance
+
+New linecode.4/0QUAD nphases=3 basefreq=60  ! ohms per 100ft
+~ rmatrix = ( 0.1167 | 0.0467    0.1167 | 0.0467    0.0467    0.1167)
+~ xmatrix = (0.0667  |  0.0267    0.0667  |  0.0267    0.0267    0.0667 )
+~ cmatrix = (50.92958178940651  | -0  50.92958178940651 | -0 -0 50.92958178940651  )  ! small capacitance
+
+!Define lines
+New Line.OHLine  bus1=Substation.1.2.3  Primary.1.2.3  linecode = 556MCM   length=1 normamps=6000 emergamps=6000! 5 mile line
+New Line.Quad    Bus1=Primary.1.2.3  loadbus.1.2.3  linecode = 4/0QUAD  length=1 normamps=6000 emergamps=6000  ! 100 ft
+
+!Loads - single phase
+New Load.L1 phases=1  loadbus.1.0   ( 13.8 3 sqrt / )   kW=3000   kvar=1500  model=1
+New Load.L2 phases=1  loadbus.2.0   ( 13.8 3 sqrt / )   kW=3000   kvar=1500  model=1
+New Load.L3 phases=1  loadbus.3.0   ( 13.8 3 sqrt / )   kW=3000   kvar=1500  model=1
+
+!GENERATORS DEFINITIONS
+New generator.gen1 Bus1=loadbus.1.2.3 Phases=3 kV=( 13.8 3 sqrt / )  kW=2000 pf=1 conn=wye Model=3
+
+Set VoltageBases = "230,13.8"
+Set tolerance=0.000001
+set defaultbasefreq=60

Important Note: See how the defined file has a unique circuit (ckt) name (i.e., New Circuit.3bus_bal). It is important that for scenarios where multiple distribution systems are to be used, each distribution system file must have a unique ckt name. Otherwise, PowerModelsITD.jl will generate an error indicating the user that they must input distribution systems with unique names (or use the auto_rename=true option explained later).

Boundary

The file shown below shows the ideal format to be used when defining the boundary connections in the JSON file. For transmission system boundary buses, the name of the bus is sufficient. For distribution systems, especially, cases where multiple distribution systems will be inputted, the ideal format for distribution_boundary names is circuit_name.object.name_of_object. In this example, two distribution systems (3bus_unbal and 3bus_bal) are going to be connected to buses 5 and 6 in the transmission system.

  • JSON (".json")
[
+	{
+        "transmission_boundary": "5",
+        "distribution_boundary": "3bus_unbal.voltage_source.source"
+	},
+
+	{
+        "transmission_boundary": "6",
+        "distribution_boundary": "3bus_bal.voltage_source.source"
+        }
+]

As observed in the file, we follow the ideal format when defining the distribution_boundary names. If this format is not followed (and the auto_rename=true option is not used), errors will be displayed by PowerModelsITD.jl. Errors ranging from "The distribution bus/source specified in the JSON file does not exists. Please input an existing bus/source!" to "Distribution systems have same circuit names! Please use different names for each distribution system. (e.g., New Circuit.NameOfCkt) or use the auto_rename=true option." will be displayed warning the user that something is wrong with the JSON file information provided.

But, what happens when we would like to use the same distribution system file to create multiple dsitribution systems connected at different transmission system boundary buses. In other words, we don't care too much about the names of the distribution circuits, and the boundary names in the JSON file are inputted in a sequential order. Then, for use with caution, PowerModelsITD.jl supports the use of an auto-renaming option that renames repeated circuits in a sequential manner such as: pmd_files = [pmd, pmd, ..., pmd], pmd_cktName_1, pmd_cktName_2, ..., pmd_cktName_n.

Important Note: All elements/components inside the pmd=> dictionary will always be renamed based on the format ckt_name.component_name

The auto_rename=true Option

Important Note: Use this option with extreme caution! When this option is used, a @warn will be displayed such that the user is aware that the boundary connections may be wrong because they are assigned/connected in a sequential manner and not based on buses names.

Let's go through an example case where we would like to use the same distribution system file to create a test case where multiple distribution systems (with the same name) are connected to different transmission system boundary buses. And, we don't care about the specific boundary connections since they can be done sequentially (since all or some distribution systems will be a copy of the same circuit and will have the same names).

Let's first define the test case in Julia:

using PowerModelsITD
+using Ipopt
+
+pm_file = joinpath(dirname(trans_path), "case5_with2loads.m")
+pmd_file = joinpath(dirname(dist_path), "case3_unbalanced_withoutgen.dss")
+pmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies
+pmitd_file = joinpath(dirname(bound_path), "case5_case3x2.json")
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}
+
+result = solve_opfitd(pm_file, pmd_files, pmitd_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)

Another way to define and solve the problem could be (both ways are equivalent):

using PowerModelsITD
+using Ipopt
+
+pm_file = joinpath(dirname(trans_path), "case5_with2loads.m")
+pmd_file = joinpath(dirname(dist_path), "case3_unbalanced_withoutgen.dss")
+pmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies
+pmitd_file = joinpath(dirname(bound_path), "case5_case3x2.json")
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}
+
+pmitd_data = parse_files(pm_file, pmd_files, pmitd_file; auto_rename=true)
+result = solve_model(pmitd_data, pmitd_type, Ipopt.Optimizer, build_opfitd)

Note, how the option auto_rename=true is defined such that PowerModelsITD.jl can understand that we don't care about the specific names of the circuits (because we are repeating ckts) so we are allowing the application to auto-rename the ckts as needed for its correct operation. If the auto_rename option is not defined, errors will be displayed.

The JSON file for this example is defined as:

[
+	{
+        "transmission_boundary": "5",
+        "distribution_boundary": "voltage_source.source"
+	},
+
+	{
+        "transmission_boundary": "6",
+        "distribution_boundary": "voltage_source.source"
+        }
+]

See how we do not need to especifically define the circuit names, but we still need to define the object.name_of_object. Internally, PowerModelsITD.jl will parse the files and assign the names: 3bus_unbal_nogen_1 and 3bus_unbal_nogen_2 as the names of the circuits (based on the ckt_name_n standard format).

Important Note: In the case where multiple distribuition systems are defined, let's say 3 or more, and only two have the same circuit name, if auto_rename=false (i.e., not used) errors will be displayed, if auto_rename=true only the repeated circuits will be renamed (in this case, all repeated circuits after the first one).

The auto rename option can be very useful for some cases, but users must be very careful when using it since specific boundary connections are going to be performed in a sequential manner and PowerModelsITD.jl cannot guarantee that this is what the user is expecting. To avoid confusions, we recommend users stick to the ideal boundary linking file JSON format.

diff --git a/v0.9.2/manual/formulations.html b/v0.9.2/manual/formulations.html new file mode 100644 index 0000000..b6df52f --- /dev/null +++ b/v0.9.2/manual/formulations.html @@ -0,0 +1,123 @@ + +Formulations · PowerModelsITD.jl

ITD Network Formulations

There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported ITD boundary mathematical formulations is presented below.

Sets, Parameters, and (General) Variables

\[\begin{align} +% +\mbox{sets:} & \nonumber \\ +& N \mbox{ - Set of buses}\nonumber \\ +& \mathcal{T} \mbox{ - Belongs to transmission network}\nonumber \\ +& \mathcal{D} \mbox{ - Belongs to distribution network}\nonumber \\ +& \mathcal{B} \mbox{ - Set of boundary links}\nonumber \\ +% +\mbox{parameters:} & \nonumber \\ +& \Re \mbox{ - Real part}\nonumber \\ +& \Im \mbox{ - Imaginary part}\nonumber \\ +& \Phi = a, b, c \mbox{ - Multi-conductor phases}\nonumber \\ +& \chi \rightarrow{\mathcal{T}},{\mathcal{D}} \mbox{ - Belongs to Transmission or Distribution}\nonumber \\ +& \beta^{^{\chi}} \mbox{ - Boundary bus}\nonumber \\ +% +\mbox{variables:} & \nonumber \\ +& P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} \mbox{ - Active power flow from Transmisison boundary bus to Distribution boundary bus}\nonumber \\ +& Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} \mbox{ - Reactive power flow from Transmisison boundary bus to Distribution boundary bus}\nonumber \\ +& P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{{\mathcal{D},\varphi}} \mbox{ - Active power flow from Distribution boundary bus phase $\varphi$ to Transmission boundary bus}\nonumber \\ +& Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{{\mathcal{D},\varphi}} \mbox{ - Reactive power flow from Distribution boundary bus phase $\varphi$ to Transmission boundary bus}\nonumber \\ +& V_i^{^\mathcal{T}} \mbox{ - Voltage magnitude at bus $i$}\nonumber \\ +& \theta_i^{^\mathcal{T}} \mbox{ - Voltage angle at bus $i$}\nonumber \\ +& v_i^{\mathcal{D}, \varphi} \mbox{ - Voltage magnitude at bus $i$ phase $\varphi$}\nonumber \\ +& \theta_i^{\mathcal{D}, \varphi} \mbox{ - Voltage angle at bus $i$ phase $\varphi$}\nonumber \\ +% +\end{align}\]

ACP-ACPU

NLPowerModelITD{ACPPowerModel, ACPUPowerModel}

ACP to ACPU (AC polar to AC polar unbalanced)

  • Coordinates: Polar
  • Variables: Power-Voltage
  • Model(s): NLP-NLP
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& V_{\beta^{^\mathcal{T}}} = v_{\beta^{^\mathcal{D}}}^{^{a}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage mag. equality - phase a} \\ +& V_{\beta^{^\mathcal{T}}} = v_{\beta^{^\mathcal{D}}}^{^{b}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage mag. equality - phase b} \\ +& V_{\beta^{^\mathcal{T}}} = v_{\beta^{^\mathcal{D}}}^{^{c}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage mag. equality - phase c} \\ +& \theta_{\beta^{^\mathcal{T}}} = \theta_{\beta^{^\mathcal{D}}}^{^{a}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage ang. equality - phase a} \\ +& \theta_{\beta^{^\mathcal{D}}}^{^{b}} = (\theta_{\beta^{^\mathcal{D}}}^{^{a}} -120^{\circ}), \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase b} \\ +& \theta_{\beta^{^\mathcal{D}}}^{^{c}} = (\theta_{\beta^{^\mathcal{D}}}^{^{a}} +120^{\circ}), \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase c} \\ +% +\end{align}\]

ACR-ACRU

NLPowerModelITD{ACRPowerModel, ACRUPowerModel}

ACR to ACRU (AC rectangular to AC rectangular unbalanced)

  • Coordinates: Rectangular
  • Variables: Power-Voltage
  • Model(s): NLP-NLP
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! + \! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! = \!\Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase a} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase b} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase c} \\ +& \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big) = \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big),\ \ \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage ang. equality - phase a} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) -120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase b} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) +120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase c} \\ +% +\end{align}\]

IVR-IVRU

IVRPowerModelITD{IVRPowerModel, IVRUPowerModel}

IVR to IVRU (AC-IV rectangular to AC-IV rectangular unbalanced)

  • Coordinates: Rectangular
  • Variables: Current-Voltage
  • Model(s): NLP-NLP
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& {V^\Re_{\beta^{^\mathcal{T}}}} \Re\Big(I_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}}\Big) + {V^\Im_{\beta^{^\mathcal{T}}}} \Im\Big(I_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}}\Big) = \!\!-\!\!\Bigg[\sum_{\varphi \in \Phi} \Bigg( \Big(v_{\beta^{^\mathcal{D}}}^{^{\varphi,\Re}}\Big) \Re\Big(I_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi}\Big) \!\!+\!\! \Big(v_{\beta^{^\mathcal{D}}}^{^{\varphi,\Im}}\Big) \Im\Big(I_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi}\Big) \Bigg) \Bigg], \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Active power flow at boundary} \\ +& {V^\Im_{\beta^{^\mathcal{T}}}} \Re\Big(I_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}}\Big) - {V^\Re_{\beta^{^\mathcal{T}}}} \Im\Big(I_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}}\Big) = \!\!-\!\! \Bigg[\sum_{\varphi \in \Phi} \Bigg( \Big(v_{\beta^{^\mathcal{D}}}^{^{\varphi,\Im}}\Big) \Re\Big(I_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi}\Big) \!\!-\!\! \Big(v_{\beta^{^\mathcal{D}}}^{^{\varphi,\Re}}\Big) \Im\Big(I_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi}\Big) \Bigg) \Bigg], \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Reactive power flow at boundary} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! + \! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! = \!\Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase a} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase b} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase c} \\ +& \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big) = \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big),\ \ \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage ang. equality - phase a} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) -120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase b} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) +120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase c} \\ +% +\end{align}\]

NFA-NFAU

LPowerModelITD{NFAPowerModel, NFAUPowerModel}

NFA to NFAU (Linear Network flow approximation to Linear Network flow approximation unbalanced)

  • Coordinates: N/A
  • Variables: N/A
  • Model(s): Apprx.-Apprx.
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +% +\end{align}\]

ACR-FBSUBF

NLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel}

ACR to FBSUBF (AC rectangular to forward-backward sweep unbalanced branch flow approximation)

  • Coordinates: Rectangular
  • Variables: Power-Voltage
  • Model(s): NLP-Apprx.
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! + \! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! = \!\Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase a} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase b} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase c} \\ +& \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big) = \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big),\ \ \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage ang. equality - phase a} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) -120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase b} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) +120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase c} \\ +% +\end{align}\]

ACR-FOTRU

NLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel}

ACR to FOTRU (AC rectangular to first-order Taylor rectangular unbalanced approximation)

  • Coordinates: Rectangular
  • Variables: Power-Voltage
  • Model(s): NLP-Apprx.
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! + \! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\! = \!\Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase a} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase b} \\ +& \Big({V^\Re_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!+\! \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big)^2 \!\!\!\!=\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}\Big)^2 \!\!\!\!+\! \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big)^2,\forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage mag. equality - phase c} \\ +& \Big({V^\Im_{\beta^{^\mathcal{T}}}}\Big) = \Big(v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}\Big),\ \ \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - Voltage ang. equality - phase a} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{b,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) -120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{b,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase b} \\ +& \Big(v_{\beta^{^\mathcal{D}}}^{^{c,\Im}}\Big) = tan\Bigg(atan\bigg(\frac{v_{\beta^{^\mathcal{D}}}^{^{a,\Im}}}{v_{\beta^{^\mathcal{D}}}^{^{a,\Re}}} \bigg) +120^{\circ} \Bigg) v_{\beta^{^\mathcal{D}}}^{^{c,\Re}}, \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase c} \\ +% +\end{align}\]

ACP-FOTPU

NLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel}

ACP to FOTPU (AC rectangular to first-order Taylor polar unbalanced approximation)

  • Coordinates: Polar
  • Variables: Power-Voltage
  • Model(s): NLP-Apprx.
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& V_{\beta^{^\mathcal{T}}} = v_{\beta^{^\mathcal{D}}}^{^{a}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage mag. equality - phase a} \\ +& V_{\beta^{^\mathcal{T}}} = v_{\beta^{^\mathcal{D}}}^{^{b}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage mag. equality - phase b} \\ +& V_{\beta^{^\mathcal{T}}} = v_{\beta^{^\mathcal{D}}}^{^{c}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage mag. equality - phase c} \\ +& \theta_{\beta^{^\mathcal{T}}} = \theta_{\beta^{^\mathcal{D}}}^{^{a}}, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Voltage ang. equality - phase a} \\ +& \theta_{\beta^{^\mathcal{D}}}^{^{b}} = (\theta_{\beta^{^\mathcal{D}}}^{^{a}} -120^{\circ}), \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase b} \\ +& \theta_{\beta^{^\mathcal{D}}}^{^{c}} = (\theta_{\beta^{^\mathcal{D}}}^{^{a}} +120^{\circ}), \ \forall \beta^{^\mathcal{D}} \in N^{^\mathcal{B}} \cap N^{^\mathcal{D}} \mbox{ - Voltage ang. equality - phase c} \\ +% +\end{align}\]

BFA-LinDist3Flow

BFPowerModelITD{BFAPowerModel, LinDist3FlowPowerModel}

BFA to LinDist3Flow (Branch flow approximation to LinDist3Flow approximation)

  • Coordinates: W-space
  • Variables: Power-Voltage (W)
  • Model(s): Apprx.-Apprx.
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{a}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase a} \\ +& \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{b}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase b} \\ +& \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{c}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase c} \\ +% +\end{align}\]

SOCBF-LinDist3Flow

BFPowerModelITD{SOCBFPowerModel, LinDist3FlowPowerModel}

SOCBF to LinDist3Flow (Second-order cone branch flow relaxation to LinDist3Flow approximation)

  • Coordinates: W-space
  • Variables: Power-Voltage (W)
  • Model(s): Relax.-Apprx.
  • ITD Boundary Math. Formulation:

\[\begin{align} +% +\mbox{ITD boundaries: } & \nonumber \\ +& \sum_{\varphi \in \Phi} P_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + P_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Active power flow at boundary} \\ +& \sum_{\varphi \in \Phi} Q_{\beta^{^\mathcal{D}}\beta^{^\mathcal{T}}}^{\mathcal{D},\varphi} + Q_{\beta^{^\mathcal{T}}\beta^{^\mathcal{D}}}^{^\mathcal{T}} = 0, \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in {\Lambda} \mbox{ - Reactive power flow at boundary} \\ +& \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{a}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase a} \\ +& \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{b}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase b} \\ +& \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{c}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase c} \\ +% +\end{align}\]

diff --git a/v0.9.2/manual/quickguide.html b/v0.9.2/manual/quickguide.html new file mode 100644 index 0000000..6a1eb87 --- /dev/null +++ b/v0.9.2/manual/quickguide.html @@ -0,0 +1,34 @@ + +Getting Started · PowerModelsITD.jl

Quick Start Guide

Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD)

Once PowerModelsITD.jl is installed, Ipopt is installed, and network data files for the transmission system, distribution system(s), and boundary linking (e.g., "case5_withload.m", "case3_unbalanced.dss, "case5_case3_unbal.json" in the package folder under ./test/data) have been acquired, an Integrated Transmission-Distribution (ITD) AC Optimal Power Flow can be executed as follows,

using PowerModelsITD
+using Ipopt
+
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.
+
+result = solve_opfitd("case5_withload.m", "case3_unbalanced.dss", "case5_case3_unbal.json", pmitd_type, Ipopt.Optimizer)

Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems

The snippet shown below demonstrates how to run an OPFITD with multiple (different) distribution systems connected to different transmission system buses. In summary, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries must be defined in the boundary linking file. For the following snippet, assume we have access to ./test/data to get the respective files.

using PowerModelsITD
+using Ipopt
+
+# Files
+pm_file = "case5_with2loads.m"
+pmd_file1 = "case3_unbalanced.dss"
+pmd_file2 = "case3_balanced.dss"
+boundary_file = "case5_case3x2_unbal_bal.json"
+
+pmd_files = [pmd_file1, pmd_file2] # create a vector of distribution system files.
+
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.
+
+result = solve_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer)

Parsing files

To parse the respective files into PowerModelsITD.jl, use the parse_files command

pmitd_data = parse_files(pm_file, pmd_file, boundary_file) # single distribution system file.

To parse for a model with multiple distribution system files, just pass the distribution system argument as a vector of files, as seen below.

pmd_files = [pmd_file1, pmd_file2]
+pmitd_data = parse_files(pm_file, pmd_files, boundary_file) # vector of multiple distribution system files.

Getting Results

The solve_ commands in PowerModelsITD.jl return detailed results data in the form of a dictionary. This dictionary can be saved for further processing as follows,

result = solve_opfitd(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer)

Note: the function solve_opfitd(...) does not neccessarily needs for the data to be parsed (i.e., parse_files(...)). The user can pass directly the files of the problem to the solve_opfitd(...) function, as seen previously.

Alternatively, you can use the function solve_model(...) and specify the build method, in this case build_opfitd:

result = solve_model(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer, build_opfitd)

Running Multinetwork (mn) Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems (ms)

The snippet shown below demonstrates how to run a multinetwork (mn) OPFITD with multiple distribution systems (ms) connected to different transmission system buses. As seen previously, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries are defined in the boundary linking file. To run a multinetwork problem, time series values can be defined inside the opendss file(s) that represent the distribution system(s). Some important things to remember are:

  • The time series values can be defined in a .csv file that is called inside the opendss file(s).

  • When the data is parsed, the transmission system will be automatically replicated to the number of time series values available in the opendss file(s).

  • If data in the transmission system need to be modified for different time steps, the data can be modified after the parsing process is done.

  • Remember to run the special multinetwork function or build function (i.e., solve_mn_opfitd(...) or solve_model(..., build_mn_opfitd)).

For the following snippet, assume we have access to ./test/data to get the respective files.

using PowerModelsITD
+using Ipopt
+
+# Files
+pm_file = "case5_with2loads.m"
+pmd_file = "case3_unbalanced_withoutgen_mn.dss"
+boundary_file = "case5_case3x2.json"
+
+pmd_files = [pmd_file, pmd_file] # create a vector of distribution system files.
+
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.
+
+result = solve_mn_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)
+

Important Note: If you examine the file case3_unbalanced_withoutgen_mn.dss in detail, you will notice how time series power values are defined inside the opendss file as New Loadshape.ls1 pmult=(file=load_profile.csv), and then the load models are defined with parameters model=1 daily=ls1. This definition is sufficient for PowerModelsITD.jl to understand that this is a multinetwork problem. If you examine the content of the load_profile.csv file, you will notice that there are 4 time steps. This will cause the transmission, distribution, and boundary data to be replicated x4 (i.e., 4 times) while it is parsed to represent the overall problem.

Note: The auto_rename=true option used in this example will be explained in later documentation.

Accessing Different Formulations

There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported formulations is presented below.

Examples

More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsITD.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.

diff --git a/v0.9.2/manual/storage.html b/v0.9.2/manual/storage.html new file mode 100644 index 0000000..547a255 --- /dev/null +++ b/v0.9.2/manual/storage.html @@ -0,0 +1,84 @@ + +Storage · PowerModelsITD.jl

Quick Guide on Storage (with Costs) Problem Specification

In this guide, we will discuss the differences between the two problem specifications currently available in PowermodelsITD that consider storage devices when performing OPF.

TL;DR

  • solve_opfitd(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), but, no cost is added to the objective cost function. In other words, cycling/using the storage devices is a free operation.

  • solve_opfitd_storage(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), and cost term(s) are added to the objective cost function. In other words, cycling/using the storage devices is not free and the specific cost of using the storage device is added to the cost function as $sd \times cost$, where sd is the amount of power discharged and cost is a scalar value in units $/kWh or $/pu.

Default Costs and Units

By default, the costs of the storage devices are calculated based on the references shown below. However, users are encouraged to assign their own costs after parsing files.

  • Transmission cost must be in $/pu units.

(e.g., transformation from $/MWh -> $/pu: 200 $/MWh x 100 MVA base/1 pu = 20,000 $/pu)

  • Distribution cost must be in $/kWh units.
  • Default costs of storage devices (in $/kWh) are computed based on Eq. (23) from this publication.
  • The total cost of the storage system, $C_{total}^{ES}$, is estimated based on NREL data obtained from this resource.

\[\begin{align} +% +cost = c_{\epsilon, \varepsilon} = \dfrac{C_{total}^{ES}}{Cyc\cdot {E_{_{ES}}^{max}}\cdot DoD\cdot \eta_{r}}, +% +\end{align}\]

Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs

The snippet below shows how to run a steady-state Integrated Transmission-Distribution (ITD) AC Optimal Power Flow with storage costs. All of these files can be found in test folder of the repository.

using PowerModelsITD
+using Ipopt
+
+pm_file = "case5_withload.m"
+pmd_file = "case3_balanced_withBattery.dss"
+pmitd_file = "case5_case3_bal_battery.json"
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}
+pmitd_data = parse_files(pm_file, pmd_file, pmitd_file)
+
+# cost to assign to energy storage
+# Units $/kWh
+strg_cost = 0.025
+
+# add cost to storages in PMD
+for (st_name, st_data) in pmitd_data["it"]["pmd"]["storage"]
+    st_data["cost"] = strg_cost
+end
+
+# solve optimization with storage cost problem
+pmitd_result_strg = solve_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)
+

Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs Multinetwork

Running a multinetwork (i.e., multi-timestep) is also very simple. Only slight changes are required (assuming multinetwork data exists in the distribution files) as seen in the snippet shown below.

using PowerModelsITD
+using Ipopt
+
+pm_file = "case5_withload.m"
+pmd_file = "case3_balanced_withBattery_mn_diff.dss"
+pmitd_file = "case5_case3_bal_battery_mn.json"
+pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}
+pmitd_data = parse_files(pm_file, pmd_file, pmitd_file; multinetwork=true)
+
+# cost to assign to energy storage
+# Units $/kWh
+strg_cost = 0.0025
+
+# add cost to storages in PMD
+for (nw_id, nw_data) in pmitd_data["it"]["pmd"]["nw"]
+    for (st_name, st_data) in nw_data["storage"]
+        st_data["cost"] = strg_cost
+    end
+end
+
+pmitd_result_strg = solve_mn_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)
+

How are the Storage Devices Modeled?

The storage mathematical model (for both transmission and distribution system(s)) are based on the model shown here. Given the storage data model and two sequential time points $s$ and $t$, the storage component's mathematical model is given by,

\[\begin{align} +% +\mbox{data: } & \nonumber \\ +& e^u \mbox{ - energy rating} \nonumber \\ +& sc^u \mbox{ - charge rating} \nonumber \\ +& sd^u \mbox{ - discharge rating} \nonumber \\ +& \eta^c \mbox{ - charge efficiency} \nonumber \\ +& \eta^d \mbox{ - discharge efficiency} \nonumber \\ +& te \mbox{ - time elapsed} \nonumber \\ +& S^l \mbox{ - power losses} \nonumber \\ +& Z \mbox{ - injection impedance} \nonumber \\ +& q^l, q^u \mbox{ - reactive power injection limits} \nonumber \\ +& s^u \mbox{ - thermal injection limit} \nonumber \\ +& i^u \mbox{ - current injection limit} \nonumber \\ +% +\mbox{variables: } & \nonumber \\ +& e_i \in (0, e^u) \mbox{ - storage energy at time $i$} \label{var_strg_energy} \\ +& sc_i \in (0, sc^u) \mbox{ - charge amount at time $i$} \label{var_strg_charge} \\ +& sd_i \in (0, sd^u) \mbox{ - discharge amount at time $i$} \label{var_strg_discharge} \\ +& sqc_i \mbox{ - reactive power slack at time $i$} \label{var_strg_qslack} \\ +& S_i \mbox{ - complex bus power injection at time $i$} \label{var_strg_power} \\ +& I_i \mbox{ - complex bus current injection at time $i$} \label{var_strg_current} \\ +% +\mbox{subject to: } & \nonumber \\ +& e_t - e_s = te \left(\eta^c sc_t - \frac{sd_t}{\eta^d} \right) \label{eq_strg_energy} \\ +& sc_t \cdot sd_t = 0 \label{eq_strg_compl} \\ +& S_t + (sd_t - sc_t) = j \cdot sqc_t + S^l + Z |I_t|^2 \label{eq_strg_loss} \\ +& q^l \leq \Im(S_t) \leq q^u \label{eq_strg_q_limit} \\ +& |S_t| \leq s^u \label{eq_strg_thermal_limit} \\ +& |I_t| \leq i^u \label{eq_strg_current_limit} +\end{align}\]

What is the Cost (Objective) Function?

The cost (objective) function of the solve_opfitd_storage(...) and solve_mn_opfitd_storage(...) is based on the mathematical model:

\[\begin{align} +\begin{split} + \text{min} &\bigg(\sum_{k \in G^{^\mathcal{T}}} c_{2k}(P_{g,k}^{\mathcal{T}})^2 + c_{1k}(P_{g,k}^{\mathcal{T}}) + c_{0k} \bigg) +\\ + &\bigg(\sum_{\epsilon \in E^{^\mathcal{T}}} c_{\epsilon}(sd_{\epsilon}^{\mathcal{T}})\bigg) +\\ + &\bigg(\sum_{m \in G^{^\mathcal{D}}} c_{2m}(\sum_{\varphi \in \Phi} P_{g,m}^{\mathcal{D},\varphi})^2 + c_{1m}(\sum_{\varphi \in \Phi} P_{g,m}^{\mathcal{D},\varphi}) + c_{0m} \bigg) +\\ + &\bigg(\sum_{\varepsilon \in E^{^\mathcal{D}}} c_{\varepsilon}(sd_{\varepsilon}^{\mathcal{D}})\bigg) +\end{split} +\end{align}\]

As observed, the costs of discharging the storage devices for both Transmission and Distribution system(s) are added the cost function of the OPFITD. This means that storage devices will only discharge power to the grid when the cost of charging + discharging energy is less than the cost of not using (cycling) the storage device.

This cost function only cosiders cost as a factor for determining when to use the storage devices, however, it is important to note that users are encouraged to create their own cost functions that consider other factors (e.g., voltage deviations) that will make the storage devices operate more often, as needed.

diff --git a/v0.9.2/reference/base.html b/v0.9.2/reference/base.html new file mode 100644 index 0000000..305603b --- /dev/null +++ b/v0.9.2/reference/base.html @@ -0,0 +1,2 @@ + +Base · PowerModelsITD.jl

Base

PowerModelsITD.refFunction

helper function to access the AbstractPowerModelITD structs' ref, returns (id,data) pairs

source
PowerModelsITD.varFunction

helper function to access the AbstractPowerModelITD structs' var, returns JuMP VariableRef

source
PowerModelsITD.idsFunction

helper function to access the ids of AbstractPowerModelITD structs' ref, returns ints

source
PowerModelsITD.conFunction

helper function to access the AbstractPowerModelITD structs' con, returns JuMP Constraint

source
PowerModelsITD.nwsFunction

helper function to access multinetwork data from AbstractPowerModelITD structs, returns (id,data) pairs

source
PowerModelsITD.nw_idsFunction

helper function to access the ids of multinetworks from AbstractPowerModelITD structs, returns ints

source

Helper functions

Ref Creation Functions

PowerModelsITD.ref_add_core!Method
function ref_add_core!(ref::Dict{Symbol,Any})

Returns a dict that stores commonly used pre-computed data obtained from the data dictionary, primarily for converting data-types, filtering out loads in the transmission-side system, removing slack generators in the distribution-side system, and storing system-wide values that need to be computed globally. Some of the common keys include:

  • See ref_add_core!(ref) from PowerModels),
  • See ref_add_core!(ref) from PowerModelsDistribution),
  • :boundary – the set of boundary elements that are active in the network,
  • :arcs_boundary_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:boundary]],
  • :arcs_boundary_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:boundary]],
  • :arcs_boundary – the set of arcs from both arcs_boundary_from and arcs_boundary_to,
  • :bus_arcs_boundary_from – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_from]]),
  • :bus_arcs_boundary_to – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_to]]).
source
diff --git a/v0.9.2/reference/constants.html b/v0.9.2/reference/constants.html new file mode 100644 index 0000000..6e1c41b --- /dev/null +++ b/v0.9.2/reference/constants.html @@ -0,0 +1,2 @@ + +Constants · PowerModelsITD.jl
diff --git a/v0.9.2/reference/constraints.html b/v0.9.2/reference/constraints.html new file mode 100644 index 0000000..c3f5ce8 --- /dev/null +++ b/v0.9.2/reference/constraints.html @@ -0,0 +1,470 @@ + +Constraints · PowerModelsITD.jl

Constraints

PowerModelsITD.constraint_boundary_currentMethod
function constraint_boundary_current(
+    pmitd::AbstractIVRPowerModelITD,
+    i::Int;
+    nw::Int=nw_id_default
+)

Boundary power constraints based on rectangular currents (I) for AbstractIVRPowerModelITD.

source
PowerModelsITD.constraint_boundary_powerMethod
function constraint_boundary_power(
+    pmitd::LPowerModelITD,
+    i::Int;
+    nw::Int=nw_id_default
+)

Boundary power constraints for LPowerModelITD (Linear versions - Active P only).

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.ACPPowerModel,
+    pmd::_PMD.ACPUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

ACP-ACPU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.ACPPowerModel,
+    pmd::_PMD.FOTPUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

ACP-FOTPU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.ACRPowerModel,
+    pmd::_PMD.ACRUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

ACR-ACRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.ACRPowerModel,
+    pmd::_PMD.FBSUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

ACR-FBSU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.ACRPowerModel,
+    pmd::_PMD.FOTRUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

ACR-FOTRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.DCPPowerModel,
+    pmd::_PMD.DCPUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

DCP-DCPU boundary bus voltage angle constraints: DCP angle.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.IVRPowerModel,
+    pmd::_PMD.IVRUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

IVR-IVRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.NFAPowerModel,
+    pmd::_PMD.NFAUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

NFA-NFAU boundary bus voltage angle constraints: empty NFA angle.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.AbstractBFAModel,
+    pmd::_PMD.LPUBFDiagPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

BFA-LinDist3FlowPowerModel boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.AbstractSDPWRMModel,
+    pmd::_PMD.SOCConicUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SDPWRM-SOCConicUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.AbstractSOCBFConicModel,
+    pmd::_PMD.SOCConicUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SOCBFConic-SOCUBFConic boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.AbstractSOCBFModel,
+    pmd::_PMD.LPUBFDiagPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

SOCBF-LinDist3FlowPowerModel boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.AbstractSOCBFModel,
+    pmd::_PMD.SOCNLPUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SOCBF-SOCNLUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+    pm::_PM.AbstractSOCWRConicModel,
+    pmd::_PMD.SOCConicUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SOCWRConic-SOCConicUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.ACPPowerModel,
+    pmd::_PMD.ACPUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

ACP-ACPU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.ACPPowerModel,
+    pmd::_PMD.FOTPUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

ACP-FOTPU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.ACRPowerModel,
+    pmd::_PMD.ACRUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

ACR-ACRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.ACRPowerModel,
+    pmd::_PMD.FBSUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

ACR-FBSU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.ACRPowerModel,
+    pmd::_PMD.FOTRUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

ACR-FOTRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.DCPPowerModel,
+    pmd::_PMD.DCPUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

DCP-DCPU boundary bus voltage magnitude constraints: empty since DC keeps vm = 1 for all.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.IVRPowerModel,
+    pmd::_PMD.IVRUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

IVR-IVRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.NFAPowerModel,
+    pmd::_PMD.NFAUPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

NFA-NFAU boundary bus voltage magnitude constraints: empty NFA.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.AbstractBFAModel,
+    pmd::_PMD.LPUBFDiagPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

BFA-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.AbstractSDPWRMModel,
+    pmd::_PMD.SOCConicUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SDPWRM-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.AbstractSOCBFConicModel,
+    pmd::_PMD.SOCConicUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SOCBFConic-SOCUBFConic boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.AbstractSOCBFModel,
+    pmd::_PMD.LPUBFDiagPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int=nw_id_default
+)

SOCBF-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.AbstractSOCBFModel,
+    pmd::_PMD.SOCNLPUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SOCBF-SOCNLUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+    pm::_PM.AbstractSOCWRConicModel,
+    pmd::_PMD.SOCConicUBFPowerModel,
+    i::Int,
+    f_idx::Tuple{Int,Int,Int},
+    f_connections::Vector{Int},
+    t_connections::Vector{Int};
+    nw::Int = nw_id_default
+)

SOCWRConic-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_distribution_current_balanceMethod
function constraint_distribution_current_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.AbstractUnbalancedIVRModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

IVRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractBFPowerModelITD,
+    pmd::_PMD.LPUBFDiagPowerModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

LinDist3FlowPowerModel distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.FBSUBFPowerModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

FBSU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.FOTPUPowerModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

FOTPU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.FOTRUPowerModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

FOTRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.AbstractUnbalancedACPModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

ACPU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.AbstractUnbalancedACRModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

ACRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.AbstractUnbalancedActivePowerModel,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

DCPU/NFAU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pmd::_PMD.AbstractUnbalancedWModels,
+    n::Int,
+    i::Int,
+    terminals::Vector{Int},
+    grounded::Vector{Bool},
+    bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},
+    bus_gens::Vector{Tuple{Int,Vector{Int}}},
+    bus_storage::Vector{Tuple{Int,Vector{Int}}},
+    bus_loads::Vector{Tuple{Int,Vector{Int}}},
+    bus_shunts::Vector{Tuple{Int,Vector{Int}}},
+    bus_arcs_boundary_to
+)

Unbalanced W models distribution constraint power balance.

source
PowerModelsITD.constraint_transmission_current_balanceMethod
function constraint_transmission_current_balance(
+    pmitd::AbstractPowerModelITD,
+    pm::_PM.AbstractIVRModel,
+    n::Int,
+    i::Int,
+    bus_arcs,
+    bus_arcs_dc,
+    bus_gens,
+    bus_pd,
+    bus_qd,
+    bus_gs,
+    bus_bs,
+    bus_arcs_boundary_from
+)

IVR transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pm::_PM.AbstractACPModel,
+    n::Int,
+    i::Int,
+    bus_arcs,
+    bus_arcs_dc,
+    bus_arcs_sw,
+    bus_gens,
+    bus_storage,
+    bus_pd,
+    bus_qd,
+    bus_gs,
+    bus_bs,
+    bus_arcs_boundary_from
+)

ACP transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pm::_PM.AbstractACRModel,
+    n::Int,
+    i::Int,
+    bus_arcs,
+    bus_arcs_dc,
+    bus_arcs_sw,
+    bus_gens,
+    bus_storage,
+    bus_pd,
+    bus_qd,
+    bus_gs,
+    bus_bs,
+    bus_arcs_boundary_from
+)

ACR transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pm::_PM.AbstractActivePowerModel,
+    n::Int,
+    i::Int,
+    bus_arcs,
+    bus_arcs_dc,
+    bus_arcs_sw,
+    bus_gens,
+    bus_storage,
+    bus_pd,
+    bus_qd,
+    bus_gs,
+    bus_bs,
+    bus_arcs_boundary_from
+)

DCP/NFA transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+    pmitd::AbstractPowerModelITD,
+    pm::_PM.AbstractWModels,
+    n::Int,
+    i::Int,
+    bus_arcs,
+    bus_arcs_dc,
+    bus_arcs_sw,
+    bus_gens,
+    bus_storage,
+    bus_pd,
+    bus_qd,
+    bus_gs,
+    bus_bs,
+    bus_arcs_boundary_from
+)

W Models (e.g., SOCBF) transmission constraint power balance.

source
diff --git a/v0.9.2/reference/data_models.html b/v0.9.2/reference/data_models.html new file mode 100644 index 0000000..47f8141 --- /dev/null +++ b/v0.9.2/reference/data_models.html @@ -0,0 +1,71 @@ + +Data Models · PowerModelsITD.jl

Data Models and Parsers

Parsers

PowerModelsITD.parse_filesFunction
function parse_files(
+    pm_file::String,
+    pmd_file::String,
+    pmitd_file::String;
+    multinetwork::Bool=false
+    auto_rename::Bool=false
+)

Parses PowerModels, PowerModelsDistribution, and PowerModelsITD boundary linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.

source
function parse_files(
+    pm_file::String,
+    pmd_files::Vector,
+    pmitd_file::String;
+    multinetwork::Bool=false,
+    auto_rename::Bool=false
+)

Parses PowerModels, PowerModelsDistribution vector, and PowerModelsITD linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.

source
PowerModelsITD.parse_jsonFunction
function parse_json(
+    path::String
+)

Parses a JavaScript Object Notation (JSON) file from the file path path and returns a dictionary containing the corresponding parsed data. Primarily used for boundry linkage files.

source
PowerModelsITD.parse_link_fileFunction
function parse_link_file(
+    pmitd_file::String
+)

Parses a linking file from the file pmitd_file and returns a PowerModelsITD data structured linking network dictionary.

source
PowerModelsITD.parse_power_transmission_fileFunction
function parse_power_transmission_file(
+    pm_file::String;
+    skip_correct::Bool = true,
+    multinetwork::Bool=false,
+    number_multinetworks::Int=0
+)

Parses a power transmission file from the file pm_file and returns a PowerModels data structured pm network dictionary.

source
PowerModelsITD.parse_power_distribution_fileFunction
function parse_power_distribution_file(
+    pmd_file::String,
+    base_data::Dict{String,<:Any}=Dict{String, Any}();
+    unique::Bool=true,
+    multinetwork::Bool=false,
+    auto_rename::Bool=false,
+    ms_num::Int=1
+)

Parses power distribution files from the file pmd_file depending on the file extension. base_data represents a dictionary that contains data from other pmd systems (serving as the base where all data will be combined), unique represents if the pmd data provided is the first one passed or unique. If it is not unique, then the components need to be renamed before being added. Returns a PowerModelsDistribution data structured pmd network (a dictionary) with renamed components (if applicable).

source

Data Transformations

PowerModelsITD.apply_kron_reduction!Method
function apply_kron_reduction!(
+    pmitd_data::Dict{String,<:Any}
+)

Applies the corresponding transformation that applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases.

source
PowerModelsITD.apply_phase_projection!Method
function apply_phase_projection!(
+    pmitd_data::Dict{String,<:Any}
+)

Applies the corresponding transformation to apply phase projection: pad matrices and vectors to max number of conductors

source
PowerModelsITD.apply_phase_projection_delta!Method
function apply_phase_projection_delta!(
+    pmitd_data::Dict{String,<:Any}
+)

Applies the corresponding transformation to apply phase projection delta for components where unprojected states are not yet supported (delta configurations). See [apply_phase_projection!]

source
PowerModelsITD.apply_voltage_angle_difference_bounds!Function
function apply_voltage_angle_difference_bounds!(
+    pmitd_data::Dict{String,<:Any},
+    vad::Real=5.0
+)

Applies the corresponding transformation of voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines, to the pmd dictionary.

source
PowerModelsITD.apply_voltage_bounds!Method
function apply_voltage_bounds!(
+    pmitd_data::Dict{String,<:Any};
+    vm_lb::Union{Real,Missing}=0.9,
+    vm_ub::Union{Real,Missing}=1.1
+)

Applies the corresponding transformation of voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb) bounds, scaled by the bus' voltage, to the pmd dictionary.

source
PowerModelsITD.make_lossless!Method
function make_lossless!(
+    pmitd_data::Dict{String,<:Any}
+)

Applies the corresponding transformation that removes parameters from objects with loss models to make them lossless. This includes switches voltage sources and transformers, which all have loss model parameters that can be omitted.

source
PowerModelsITD.remove_all_bounds!Function
function remove_all_bounds!(
+    pmitd_data::Dict{String,<:Any};
+    exclude::Vector{<:String}=String["energy_ub"]
+)

Applies the corresponding transformation that removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}. By default, "energy_ub" is excluded from this removal, since it is a required property on storage (in pmd).

source

Data Checking and Units Correction

PowerModelsITD.correct_network_data!Function
function correct_network_data!(
+    data::Dict{String,<:Any};
+    multinetwork::Bool=false
+)

Corrects and prepares the data in both pm and pmd dictionaries. Also, assigns the ids given in the boundary linking data to number buses. data is the pmitd dictionary to be corrected and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.

source
PowerModelsITD.assign_boundary_buses!Function
function assign_boundary_buses!(
+    data::Dict{String,<:Any};
+    multinetwork::Bool=false
+)

Assigns the names given in the boundary linking data to number buses in corresponding transmission and distribution networks. data is the pmitd dictionary containing the boundary information and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.

source
PowerModelsITD.resolve_units!Function
function resolve_units!(
+    data::Dict{String,<:Any};
+    multinetwork::Bool=false,
+    number_multinetworks::Int=0
+)

Resolve the units used throughout the disparate datasets by setting the same settings bases. data is the pmitd dictionary to be corrected by resolving units, multinetwork is the boolean that defines if there are multiple networks that need to be corrected, and number_multinetworks defines the number of multinetworks.

source
PowerModelsITD.replicateFunction
function replicate(
+    sn_data::Dict{String,<:Any},
+    count::Int;
+    global_keys::Set{String}=Set{String}()
+)

Turns in given single network pmitd data in multinetwork data with a count replicate of the given network. Note that this function performs a deepcopy of the network data. Significant multinetwork space savings can often be achieved by building application specific methods of building multinetwork with minimal data replication. sn_data is the data to be replicated, count is the number of networks to be replicated.

source
PowerModelsITD.sol_data_model!Function
function sol_data_model!(
+    pmitd::AbstractPowerModelITD,
+    solution::Dict{String,<:Any}
+)

solution_processor to convert the solution(s) to polar voltage magnitudes and angles.

source
PowerModelsITD.calc_transmission_branch_flow_ac!Function
function calc_transmission_branch_flow_ac!(
+    result::Dict{String,<:Any},
+    pmitd_data::Dict{String,<:Any};
+)

Assumes a valid ac solution is included in the result and computes the branch flow values. Returns the pf solution inside the pmitd_data dictionary (not the result dictionary). Replicates the _PM function but compatible with PMITD dicitionary.

source
PowerModelsITD.transform_pmitd_solution_to_eng!Function
function transform_pmitd_solution_to_eng!(
+    result::Dict{String,<:Any},
+    pmitd_data::Dict{String,<:Any}
+)

Transforms the PMITD solution from MATH to ENG model. This transformation facilitates the conversion in "pmitd" of buses numbers to buses names according to the ENG model. Ex: (100002, 9, 6) -> (100002, voltagesource.3busunbalnogenmn_2.source, 6)

source
diff --git a/v0.9.2/reference/formulations.html b/v0.9.2/reference/formulations.html new file mode 100644 index 0000000..a1d4c60 --- /dev/null +++ b/v0.9.2/reference/formulations.html @@ -0,0 +1,2 @@ + +Formulations · PowerModelsITD.jl

Formulations

Abstract Models

Power ITD Models

Mutable Stuct creator

diff --git a/v0.9.2/reference/internal.html b/v0.9.2/reference/internal.html new file mode 100644 index 0000000..052790c --- /dev/null +++ b/v0.9.2/reference/internal.html @@ -0,0 +1,134 @@ + +Internal Functions · PowerModelsITD.jl

Internal Functions

PowerModelsITD._add_file_name!Method
function _add_file_name!(
+    base_data::Dict{String,<:Any},
+    data::Dict{String,<:Any}
+)

Adds filename from data to "files" dictionary in pmd (base_data).

source
PowerModelsITD._assign_boundary_buses!Method
function _assign_boundary_buses!(
+    data::Dict{String,<:Any},
+    conn;
+    multinetwork::Bool=false,
+    nw::String="0"
+)

Helper function for assigning boundary buses. data is the pmitd dictionary containing the boundary information, conn is the boundary connection information, multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned, and nw is the network number.

source
PowerModelsITD._check_and_rename_circuits!Method
function _check_and_rename_circuits!(
+    base_data::Dict{String,<:Any},
+    data::Dict{String,<:Any};
+    auto_rename::Bool=false,
+    ms_num::Int=1
+)

Checks if the name of the data ckt already exists, if so and auto_rename=false an error should be displayed telling the user that they must use the different ckt names when parsing multiple distribution systems. If auto_rename=true, PMITD will rename the repeated ckt name to repeatedCktName_(ms_num). Finally, adds the ckt name of data to "cktnames" in the `basedata` dictionary.

source
PowerModelsITD._check_cost_modelsMethod
function _check_cost_models(
+    pm::_PM.AbstractPowerModel
+)

Checks that all cost models are of the same type. Adapted from the implementation in PowerModels <= v0.19.

source
PowerModelsITD._check_dcline_cost_modelsMethod
function _check_dcline_cost_models(
+    pm::_PM.AbstractPowerModel
+)

Checks that all dcline cost models are of the same type. Adapted from the implementation in PowerModels <= v0.19.

source
PowerModelsITD._check_gen_cost_modelsMethod
function _check_gen_cost_models(
+    pm::_PM.AbstractPowerModel
+)

Checks that all generator cost models are of the same type. Adapted from the implementation in PowerModels <= v0.19.

source
PowerModelsITD._compute_boundary_active_power_start_values_distributionMethod
function _compute_boundary_active_power_start_values_distribution(
+    nw_ref::Dict{Symbol,<:Any}
+)

Computes the starting values for pbound_to variables. Returns dictionary with summation of the activate power loads. Returns dictionary with the summation of the active power loads for each dist. system.

source
PowerModelsITD._compute_default_strg_cost_transmissionMethod
function _compute_default_strg_cost_transmission(
+    strg_data::Dict{String,<:Any},
+    baseMVA::Float64
+)

Computes a default cost for the energy storage (transmission). Returns the default storage cost to be added to the data dictionary.

source
PowerModelsITD._convert_to_pmitd_structureMethod
function _convert_to_pmitd_structure(
+    data::Vector{Any}
+)

Converts json data parsed into the required pmitd structure. Returns the new data structure with necessary information and compatible names.

source
PowerModelsITD._correct_boundary_names!Method
function _correct_boundary_names!(
+    pmitd_data::Dict{String,<:Any}
+)

Corrects the names of distribution system boundary buses given in boundary linking file based on the cktnames stored in the "pmd"=>"cktnames". The correction is done sequentially, so each distribution boundary bus name will be assigned the specific ckt name that exists in the numerical position of the vector "cktnames". This process should only be applied when users explicitly use the option `autorename=true, and awarning` is displayed warning the user that the boundaries may not be correct.

source
PowerModelsITD._objective_variable_dc_costFunction
function _objective_variable_dc_cost(
+    pm::_PM.AbstractPowerModel,
+    report::Bool=true
+)

Adds pdccost variables and constraints. Adapted from the implementation in PowerModels <= v0.19.

source
PowerModelsITD._objective_variable_dc_costFunction
function _objective_variable_dc_cost(
+    pm::_PM.AbstractIVRModel,
+    report::Bool=true
+)

Adds pdccost variables and constraints for IVR Model. Added for compat with PowerModels <= v0.19 implementation.

source
PowerModelsITD._objective_variable_pg_costFunction
function _objective_variable_pg_cost(
+    pm::_PM.AbstractPowerModel,
+    report::Bool=true
+)

Adds pg_cost variables and constraints. Adapted from the implementation in PowerModels <= v0.19.

source
PowerModelsITD._objective_variable_pg_costMethod
function _objective_variable_pg_cost(
+    pm::_PM.AbstractIVRModel,
+    report::Bool=true
+)

Adds pg_cost variables and constraints for IVR Model. Adapted from the implementation in PowerModels <= v0.19.

source
PowerModelsITD._rename_components!Method
function _rename_components!(
+    base_data::Dict{String,<:Any},
+    data::Dict{String,<:Any}
+)

Renames the components given in data for new multi-system and adds the renamed components to base_data dictionary structure. cktname.element

source
PowerModelsITD._rename_network_components!Method
function _rename_network_components!(
+    base_data::Dict{String,<:Any},
+    data::Dict{String,<:Any},
+    ckt_name::String
+)

Rename specific components in single network dictionary. base_data is the dictionary where the renamed components are to be added, data is the dictionary containing the components to be renamed. ckt_name is the circuit name of data.

source
PowerModelsITD._scale_loads!Method
function _scale_loads!(
+    p_data::Dict{String,<:Any},
+    scalar::Real
+)

Scales loads based on the scalar passed as second argument. p_data is the dictionary that contains the loads to be scaled. scalar is the float value used to scale all the loads in the p_data dictionary.

source
PowerModelsITD._transform_solution_to_pu!Method
function _transform_solution_to_pu!(
+    result,
+    pmitd_data::Dict{String,<:Any};
+    make_si::Bool=false,
+    multinetwork::Bool=false,
+    solution_model::String="eng"
+)

Transforms the PM and PMD solutions from SI units to per-unit (pu), and the PMD solution from MATH back to ENG model.

source
PowerModelsITD._transform_solution_to_si!Method
function _transform_solution_to_si!(
+    result,
+    pmitd_data::Dict{String,<:Any};
+    make_si::Bool=true,
+    multinetwork::Bool=false,
+    solution_model::String="eng"
+)

Transforms the PM and PMD solutions from per-unit (pu) to SI units, and the PMD solution from MATH back to ENG model.

source
diff --git a/v0.9.2/reference/objectives.html b/v0.9.2/reference/objectives.html new file mode 100644 index 0000000..9a860b6 --- /dev/null +++ b/v0.9.2/reference/objectives.html @@ -0,0 +1,42 @@ + +Objectives · PowerModelsITD.jl

Objectives

PowerModelsITD.objective_itd_min_fuel_cost_pwlMethod
function objective_itd_min_fuel_cost_pwl(
+    pmitd::AbstractPowerModelITD,
+    pm::_PM.AbstractPowerModel,
+    pmd::_PMD.AbstractUnbalancedPowerModel
+)

Fuel cost minimization objective with piecewise linear terms.

source
PowerModelsITD.objective_mc_variable_pg_costMethod
function objective_mc_variable_pg_cost(
+    pm::_PMD.AbstractUnbalancedIVRModel
+)

Adds pgcost variables and constraints (IVR formulation) (Copied from PMD and modified to allow differentiation with TD gens (...dist)).

source
PowerModelsITD.objective_mc_variable_pg_costMethod
function objective_mc_variable_pg_cost(
+    pm::_PMD.AbstractUnbalancedPowerModel
+)

Adds pgcost variables and constraints (Copied from PMD and modified to allow differentiation with TD gens (...dist)).

source
diff --git a/v0.9.2/reference/problems.html b/v0.9.2/reference/problems.html new file mode 100644 index 0000000..e847e8b --- /dev/null +++ b/v0.9.2/reference/problems.html @@ -0,0 +1,379 @@ + +Problems · PowerModelsITD.jl

Problems

Solve Problems

PowerModelsITD.solve_dmld_opfitdMethod
function solve_dmld_opfitd(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Optimal Power Flow with minimum load delta (dmld).

source
PowerModelsITD.solve_dmld_opfitdMethod
function solve_dmld_opfitd(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Optimal Power Flow with minimum load delta (dmld).

source
PowerModelsITD.solve_mn_dmld_opfitd_simpleMethod
function solve_mn_dmld_opfitd_simple(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).

source
PowerModelsITD.solve_mn_dmld_opfitd_simpleMethod
function solve_mn_dmld_opfitd_simple(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).

source
PowerModelsITD.solve_mn_opfitdMethod
function solve_mn_opfitd(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitdMethod
function solve_mn_opfitd(
+    pmitd_data::Dict{String,<:Any}
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_oltcMethod
function solve_mn_opfitd_oltc(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_oltcMethod
function solve_mn_opfitd_oltc(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_storageMethod
function solve_mn_opfitd_storage(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_mn_opfitd_storageMethod
function solve_mn_opfitd_storage(
+    pmitd_data::Dict{String,<:Any}
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_mn_pfitdMethod
function solve_mn_pfitd(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Power Flow.

source
PowerModelsITD.solve_mn_pfitdMethod
function solve_mn_pfitd(
+    pmitd_data::Dict{String,<:Any}
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Multinetwork Integrated T&D Power Flow.

source
PowerModelsITD.solve_modelMethod
function solve_model(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type::Type, optimizer,
+    build_method::Function;
+    multinetwork::Bool=false,
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Function[],
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Instantiates and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling object from power integrated transmission-distribution input data, pmitd_data. Here, pmitd_type is the integrated power transmission-distribution modeling type, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_modelMethod
function solve_model(
+    pm_file::String,
+    pmd_file::String,
+    pmitd_file::String,
+    pmitd_type::Type,
+    optimizer,
+    build_method::Function;
+    multinetwork::Bool=false,
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Function[],
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Parses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, power distribution, and boundry linking input files pm_file, pmd_file, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_modelMethod
function solve_model(
+    pm_file::String,
+    pmd_files::Vector,
+    pmitd_file::String,
+    pmitd_type::Type,
+    optimizer,
+    build_method::Function;
+    multinetwork::Bool=false,
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Function[],
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Parses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, multiple power distribution systems, and boundary linking input files pm_file, pmd_files vector of files, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork,solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_opfitdMethod
function solve_opfitd(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_opfitdMethod
function solve_opfitd(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_oltcMethod
function solve_opfitd_oltc(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_oltcMethod
function solve_opfitd_oltc(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_storageMethod
function solve_opfitd_storage(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_opfitd_storageMethod
function solve_opfitd_storage(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_pfitdMethod
function solve_pfitd(
+    pm_file,
+    pmd_file,
+    pmitd_file,
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    auto_rename::Bool=false,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Power Flow

source
PowerModelsITD.solve_pfitdMethod
function solve_pfitd(
+    pmitd_data::Dict{String,<:Any}
+    pmitd_type,
+    optimizer;
+    solution_processors::Vector{<:Function}=Function[],
+    pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    make_si::Bool=true,
+    solution_model::String="eng",
+    kwargs...
+)

Solve Integrated T&D Power Flow

source

Builders

PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+	pmitd::AbstractPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld).

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_pfitdMethod
function build_mn_pfitd(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Power Flow for BF Models.

source
PowerModelsITD.build_mn_pfitdMethod
function build_mn_pfitd(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_pfitdMethod
function build_mn_pfitd(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Multinetwork Integrated T&D Power Flow for L/NL to BF.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow for BF Models.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+	pmitd::AbstractBFPowerModelITD
+)

Constructor for Integrated T&D Power Flow for Branch Flow (BF) Formulations.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+	pmitd::AbstractIVRPowerModelITD
+)

Constructor for Integrated T&D Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+	pmitd::AbstractLNLBFPowerModelITD
+)

Constructor for Integrated T&D Power Flow for L/NL to BF.

source

Model Instantiation

PowerModelsITD.instantiate_modelFunction
function instantiate_model(
+    pm_file::String,
+    pmd_files::Vector,
+    pmitd_file::String,
+    pmitd_type::Type,
+    build_method::Function;
+    multinetwork::Bool=false,
+    pmitd_ref_extensions::Vector{<:Function}=Function[],
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    auto_rename::Bool=false,
+    kwargs...
+)

Instantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_files vector, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
function instantiate_model(
+    pm_file::String,
+    pmd_file::String,
+    pmitd_file::String,
+    pmitd_type::Type,
+    build_method::Function;
+    multinetwork::Bool=false,
+    pmitd_ref_extensions::Vector{<:Function}=Function[],
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    auto_rename::Bool=false,
+    kwargs...
+)

Instantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_file (one file provided), and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
function instantiate_model(
+    pmitd_data::Dict{String,<:Any},
+    pmitd_type::Type,
+    build_method::Function;
+    multinetwork::Bool=false,
+    pmitd_ref_extensions::Vector{<:Function}=Function[],
+    eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
+    kwargs...
+)

Instantiates and returns PowerModelsITD modeling object from parsed power transmission and distribution (PMITD) input data pmitd_data. Here, pmitd_type is the integrated power transmission and distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions is an array of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
diff --git a/v0.9.2/reference/variables.html b/v0.9.2/reference/variables.html new file mode 100644 index 0000000..7bc4eb4 --- /dev/null +++ b/v0.9.2/reference/variables.html @@ -0,0 +1,2 @@ + +Variables · PowerModelsITD.jl

Variables

diff --git a/v0.9.2/search_index.js b/v0.9.2/search_index.js new file mode 100644 index 0000000..99c13be --- /dev/null +++ b/v0.9.2/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"installation.html#Installation-Guide","page":"Installation Guide","title":"Installation Guide","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"From Julia, PowerModelsITD.jl is installed using the built-in package manager:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"PowerModelsITD\")","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Or, within the Julia REPL:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"]add PowerModelsITD","category":"page"},{"location":"installation.html#Installing-an-Optimizer","page":"Installation Guide","title":"Installing an Optimizer","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"PowerModelsITD.jl depends on optimizers to solve Optimization problems, e.g., solve_opfitd. The table below lists the optimizer packages that have been tested with PowerModelsITD.jl, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Install an optimizer using the Julia Package Manager, e.g.,","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"Ipopt\")","category":"page"},{"location":"installation.html#Known-Working-Optimizers","page":"Installation Guide","title":"Known Working Optimizers","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Solver Julia Package Installation License Supports\nArtelys Knitro KNITRO.jl Manual Comm. (MI)LP, (MI)SOCP, (MI)NLP\nCbc Cbc.jl EPL (MI)LP\nCPLEX CPLEX.jl Manual Comm. (MI)LP, (MI)SOCP\nGurobi Gurobi.jl Manual Comm. (MI)LP, (MI)SOCP\nIpopt Ipopt.jl EPL LP, QP, NLP\nJuniper.jl Juniper.jl MIT (MI)SOCP, (MI)NLP\nSCS SCS.jl MIT LP, SOCP, SDP","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Where:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"LP = Linear programming\nQP = Quadratic programming\nSOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)\nNLP = Nonlinear programming\nSDP = Semidefinite programming\n(MI)XXX = Mixed-integer equivalent of problem type XXX","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"For a complete list of JuMP supported optimizers, see JuMP Documentation.","category":"page"},{"location":"installation.html#Unsatisfiable-requirements-detected","page":"Installation Guide","title":"Unsatisfiable requirements detected","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The Pkg documentation has a section on how to understand and manage these conflicts.","category":"page"},{"location":"developer/style.html#Style-Conventions","page":"Style Guide","title":"Style Conventions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsDistribution, etc.) with some additions specific to PowerModelsITD.","category":"page"},{"location":"developer/style.html#Functions","page":"Style Guide","title":"Functions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Function additions should meeting the following criteria:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_files or constraint_boundary_voltage_angle; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.\nAll functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsITD). Public functions should have a detailed docstring instructing on usage\nAll functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclaimation point\nAll function arguments, including keyword arguments, should have their types specified.\nPrivate functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.\nFunctions should be separated by two blank lines","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"\"this function demonstrates how an internal, in-place data altering function should be defined\"\nfunction _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])\nend","category":"page"},{"location":"developer/style.html#Types-and-Enums","page":"Style Guide","title":"Types & Enums","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Prefer to use Vector{T} instead of Array{T,1}\nPrefer to use Matrix{T} instead of Array{T,2}\nEnums must be added to the JSON parser when introduced","category":"page"},{"location":"developer/style.html#Constants","page":"Style Guide","title":"Constants","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Whenever possible, const should be used to eliminate unnecesary re-evaluations of code, and every const should have a docstring, whether internal or public.","category":"page"},{"location":"developer/style.html#JuMP-Variables-and-Constraints","page":"Style Guide","title":"JuMP Variables and Constraints","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"(_)__(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"in the interest of intuitive names for users, the following special cases are also acceptable,","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"_power_real -(can be replaced with)-> _active\n_power_imaginary -(can be replaced with)-> _reactive","category":"page"},{"location":"developer/style.html#Formulation-Styles","page":"Style Guide","title":"Formulation Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy\nFormulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.","category":"page"},{"location":"developer/style.html#Problem-Specification-Styles","page":"Style Guide","title":"Problem Specification Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)\nIf a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and solve_ functions should be created that do not collide with existing problem specification functions","category":"page"},{"location":"developer/style.html#Metaprogramming","page":"Style Guide","title":"Metaprogramming","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.","category":"page"},{"location":"developer/style.html#Markdown","page":"Style Guide","title":"Markdown","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).","category":"page"},{"location":"developer/style.html#File-Structure","page":"Style Guide","title":"File Structure","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation\nsrc/form contains formulation specific variable and constraint functions, organized under separate files for different formulations\nsrc/prob contains problem specification-related functions, organized under separate files for different problem specifications\nsrc/io contains all of the tools to parse and save files\ndocs/src contains all source markdown files for the documentation\nexamples contains Jupyter notebooks with walkthroughs of PowerModelsITD for new users\ntest/data contains all data related to example and unit test cases\ntest/ contains files with unit test cases","category":"page"},{"location":"developer/style.html#Dependencies-(Project.toml)","page":"Style Guide","title":"Dependencies (Project.toml)","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"The Manifest.toml should not be included in the repo.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Introduction-to-PowerModelsITD","page":"Beginners Guide","title":"Introduction to PowerModelsITD","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this guide, we will go through a beginner guide that demonstrates the current capabilities of PowerModelsITD. This guide will showcase a non-comprehensive list of things you can do with PowerModelsITD.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Each example case shown in this guide will be divided into three main parts.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"(1) Brief explanation of the test case and what we want to do/obtain.\n(2) The Julia code needed to perform the specific case study (users can copy and paste this code directly).\n(3) The console output obtained when the code is executed.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Important: All files used in this beginner guide are available in the /test/data folder of the repository.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#1:-Solving-a-simple-Integrated-T-and-D-Optimal-Power-Flow-(OPFITD)","page":"Beginners Guide","title":"Example Case #1: Solving a simple Integrated T&D Optimal Power Flow (OPFITD)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#1","page":"Beginners Guide","title":"Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#1","page":"Beginners Guide","title":"Julia Code for Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer) # solve the opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Transmission system: $(result[\"solution\"][\"it\"][\"pm\"])\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#1","page":"Beginners Guide","title":"Console Output for Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 17953.746512039743 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.05849599838256836 [seconds]\n\n[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qf\" => -215.4572384567855, \"qt\" => 220.01471251650577, \"pt\" => 72.72770254777281, \"pf\" => -72.10324334974787), \"1\" => Dict{String, Any}(\"qf\" => -91.9457671031378, \"qt\" => 113.04924896169344, \"pt\" => -235.96795359006418, \"pf\" => 238.13985616928193), \"5\" => Dict{String, Any}(\"qf\" => 71.37529049674947, \"qt\" => -69.00868855761938, \"pt\" => 57.04309684079022, \"pf\" => -56.75055132454856), \"2\" => Dict{String, Any}(\"qf\" => 40.82747127060588, \"qt\" => -27.51897757380047, \"pt\" => -190.17342809935752, \"pf\" => 191.55864094141782), \"6\" => Dict{String, Any}(\"qf\" => 19.289482716290323, \"qt\" => 1.0554040857229503, \"pt\" => 239.9976806084548, \"pf\" => -237.90830207159405), \"7\" => Dict{String, Any}(\"qf\" => 3.7979894950920543, \"qt\" => -4.367184067738672, \"pt\" => -8.068452673591816, \"pf\" => 8.071196939812054), \"3\" => Dict{String, Any}(\"qf\" => 208.61829769507162, \"qt\" => -204.19918131371665, \"pt\" => 220.40004611863847, \"pf\" => -219.6984944935753)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 54.23181658487047, \"pg\" => 18.96136666983862), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079376986, \"pg\" => 40.00000096678977), \"5\" => Dict{String, Any}(\"qg\" => -203.1437772279937, \"pg\" => 460.3977267270933), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106876985, \"pg\" => 170.00000165033464), \"3\" => Dict{String, Any}(\"qg\" => 390.00000301325525, \"pg\" => 315.97715122322427)), \"multinetwork\" => false, \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -9.820934169803595e-29, \"vm\" => 0.8999999900918129), \"1\" => Dict{String, Any}(\"va\" => 3.9557118095964663, \"vm\" => 0.9178154479809132), \"5\" => Dict{String, Any}(\"va\" => -0.8036120919989638, \"vm\" => 0.9400883479210898), \"2\" => Dict{String, Any}(\"va\" => -0.6563318572164789, \"vm\" => 0.9416319858451535), \"10\" => Dict{String, Any}(\"va\" => 5.018509000535593, \"vm\" => 0.904864159526407), \"3\" => Dict{String, Any}(\"va\" => -0.3122279603896953, \"vm\" => 0.9670939985734723)), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"line\" => Dict{String, Any}(\"3bus_unbal.quad\" => Dict{String, Any}(\"qf\" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], \"qt\" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], \"pt\" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], \"pf\" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), \"3bus_unbal.ohline\" => Dict{String, Any}(\"qf\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"qt\" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], \"pt\" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], \"pf\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal.subxf\" => Dict{String, Any}(\"q\" => [[1354.7952022418647, 1507.3400640138161, 1504.5761375753734], [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072]], \"p\" => [[3367.1286152278885, 2346.3702946258413, 2354.835193007617], [-3367.110727286094, -2346.3597337552624, -2354.8245890269895]])), \"generator\" => Dict{String, Any}(\"3bus_unbal.gen1\" => Dict{String, Any}(\"qg_bus\" => [-0.0, -0.0, -0.0], \"qg\" => [-0.0, -0.0, -0.0], \"pg\" => [666.6676628468832, 666.6676628064197, 666.6676628099706], \"pg_bus\" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), \"load\" => Dict{String, Any}(\"3bus_unbal.l2\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3bus_unbal.l3\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3bus_unbal.l1\" => Dict{String, Any}(\"qd_bus\" => [1333.3300000000002], \"pd_bus\" => [4000.0], \"qd\" => [1333.3300000000002], \"pd\" => [4000.0])), \"bus\" => Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], \"vm\" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], \"vm\" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [124.83030630100751, 124.83048117738736, 124.8306695534823])), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}(\"multinetwork\" => false, \"boundary\" => Dict{String, Any}(\"(100001, 5, voltage_source.3bus_unbal.source)\" => Dict{String, Any}(\"pbound_fr\" => [8068.452673591816], \"qbound_fr\" => [4367.184067738673]), \"(100001, voltage_source.3bus_unbal.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], \"qbound_to\" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369])))","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#2:-Solving-a-Multinetwork-(Time-series)-Multisystem-(Multiple-Distribution-Systems)-OPFITD","page":"Beginners Guide","title":"Example Case #2: Solving a Multinetwork (Time-series) Multisystem (Multiple Distribution Systems) OPFITD","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#2","page":"Beginners Guide","title":"Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a Multinetwork case where we have the PJM 5-bus system (case5_with2loads) as the transmission system and two copies of the IEEE 4 Node Test Feeder (case3_unbalanced_withoutgen_mn.dss) as the distribution systems, where each distribution system has load profiles for their respective loads for four timesteps. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3x2.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#2","page":"Beginners Guide","title":"Julia Code for Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_with2loads.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced_withoutgen_mn.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3x2.json\") # boundary file with info. about boundary buses\npmd_files = [pmd_file, pmd_file] # vector of distrib. systems (in this case a copy of the same)\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\nresult = solve_mn_opfitd(pm_file, pmd_files, boundary_file, formulation, Ipopt.Optimizer; auto_rename=true) # solve the multinetwork opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Transmission system: $(result[\"solution\"][\"it\"][\"pm\"])\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#2","page":"Beginners Guide","title":"Console Output for Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 71583.37023067646 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.5699648857116699 [seconds]\n\n[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}(\"multinetwork\" => true, \"nw\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.7124512609962, \"qt\" => -205.25808038279263, \"pt\" => 220.4516503859562, \"pf\" => -219.74655219293345), \"4\" => Dict{String, Any}(\"qf\" => -214.48170261865238, \"qt\" => 218.94452403011204, \"pt\" => 70.63553676891648, \"pf\" => -70.02040086637558), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989474518, \"qt\" => 114.45283104138902, \"pt\" => -235.99842638945864, \"pf\" => 238.17872276993856), \"5\" => Dict{String, Any}(\"qf\" => 72.445478971592, \"qt\" => -70.00150166186677, \"pt\" => 57.688800117737046, \"pf\" => -57.388497698913255), \"2\" => Dict{String, Any}(\"qf\" => 41.053330496054876, \"qt\" => -27.739129989384807, \"pt\" => -190.18204403801204, \"pf\" => 191.56783204014675), \"6\" => Dict{String, Any}(\"qf\" => 19.29122822256867, \"qt\" => 1.0536848339377651, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516832), \"7\" => Dict{String, Any}(\"qf\" => 1.418871577263358, \"qt\" => -2.003521254092567, \"pt\" => -6.017516284814005, \"pf\" => 6.018827255834227), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338049713338, \"qt\" => -1.2985975532566612, \"pt\" => -3.008593331044258, \"pf\" => 3.008930510206021)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657131708, \"pg\" => 19.598449044556656), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.20439554885485, \"pg\" => 460.449338548765), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.2470390700032)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -4.8091331437638894e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.955108495412184, \"vm\" => 0.9178896115768673), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397082574, \"vm\" => 0.9413800134626195), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691903474, \"vm\" => 0.9421095463639055), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984569308, \"vm\" => 0.9409689065117178), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892925, \"vm\" => 0.9048635910623162), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541168204, \"vm\" => 0.967421494353026))), \"1\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.71245126093345, \"qt\" => -205.25808038273263, \"pt\" => 220.4516503861189, \"pf\" => -219.74655219309614), \"4\" => Dict{String, Any}(\"qf\" => -214.4817026186947, \"qt\" => 218.94452403016115, \"pt\" => 70.6355367692654, \"pf\" => -70.02040086672375), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989466723, \"qt\" => 114.45283104133719, \"pt\" => -235.9984263896544, \"pf\" => 238.17872277013694), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897154284, \"qt\" => -70.001501661815, \"pt\" => 57.68880011784228, \"pf\" => -57.38849769901818), \"2\" => Dict{String, Any}(\"qf\" => 41.05333049603968, \"qt\" => -27.73912998937486, \"pt\" => -190.1820440379769, \"pf\" => 191.56783204011106), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222568602, \"qt\" => 1.0536848339378524, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516832), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715773575376, \"qt\" => -2.003521254185469, \"pt\" => -6.017516285357827, \"pf\" => 6.0188272563781675), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050415234, \"qt\" => -1.2985975533248926, \"pt\" => -3.0085933319508262, \"pf\" => 3.0089305111127547)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657137874, \"pg\" => 19.598449044697038), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.2043955487948, \"pg\" => 460.44933854892776), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703907024724)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => 1.2906268155608688e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954114852, \"vm\" => 0.9178896115768619), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397229616, \"vm\" => 0.9413800134625423), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691947822, \"vm\" => 0.9421095463638751), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984889308, \"vm\" => 0.9409689065115902), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892924, \"vm\" => 0.9048635910623162), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541189024, \"vm\" => 0.9674214943530053))), \"2\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.71245126094163, \"qt\" => -205.25808038273715, \"pt\" => 220.45165038612856, \"pf\" => -219.74655219310594), \"4\" => Dict{String, Any}(\"qf\" => -214.4817026186913, \"qt\" => 218.94452403015868, \"pt\" => 70.63553676925657, \"pf\" => -70.02040086671512), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989467265, \"qt\" => 114.45283104134505, \"pt\" => -235.99842638966595, \"pf\" => 238.1787227701487), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897154538, \"qt\" => -70.00150166181722, \"pt\" => 57.688800117857696, \"pf\" => -57.38849769903358), \"2\" => Dict{String, Any}(\"qf\" => 41.053330496036935, \"qt\" => -27.739129989371886, \"pt\" => -190.18204403797492, \"pf\" => 191.56783204010912), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222572368, \"qt\" => 1.0536848339335343, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516826), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715773462648, \"qt\" => -2.0035212541732794, \"pt\" => -6.017516285360724, \"pf\" => 6.0188272563810745), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050293561, \"qt\" => -1.2985975533139513, \"pt\" => -3.008593331590926, \"pf\" => 3.008930510752742)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657138327, \"pg\" => 19.59844904471449), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.2043955488037, \"pg\" => 460.4493385489374), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703907022297)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -8.850496391421805e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954114537, \"vm\" => 0.9178896115768609), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397233032, \"vm\" => 0.9413800134625466), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691950458, \"vm\" => 0.9421095463638758), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984823784, \"vm\" => 0.9409689065116095), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892941, \"vm\" => 0.9048635910623148), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541192233, \"vm\" => 0.9674214943530055))), \"3\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.7124512609906, \"qt\" => -205.2580803827864, \"pt\" => 220.45165038608707, \"pf\" => -219.7465521930642), \"4\" => Dict{String, Any}(\"qf\" => -214.48170261865874, \"qt\" => 218.94452403012218, \"pt\" => 70.63553676895856, \"pf\" => -70.0204008664175), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989472547, \"qt\" => 114.45283104139405, \"pt\" => -235.9984263896151, \"pf\" => 238.17872277009747), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897158185, \"qt\" => -70.00150166185058, \"pt\" => 57.6888001178973, \"pf\" => -57.38849769907291), \"2\" => Dict{String, Any}(\"qf\" => 41.05333049604079, \"qt\" => -27.739129989375172, \"pt\" => -190.1820440379844, \"pf\" => 191.56783204011862), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222579896, \"qt\" => 1.0536848339270362, \"pt\" => 239.99768816280894, \"pf\" => -237.90830703516818), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715772646756, \"qt\" => -2.0035212540928145, \"pt\" => -6.017516285012341, \"pf\" => 6.018827256032563), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050059494, \"qt\" => -1.298597553290569, \"pt\" => -3.008593331239918, \"pf\" => 3.0089305104016915)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657135414, \"pg\" => 19.598449044744708), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.20439554885937, \"pg\" => 460.44933854889604), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703906988566)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => 4.6922476467138066e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954116407, \"vm\" => 0.9178896115768624), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397156218, \"vm\" => 0.9413800134626014), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691939039, \"vm\" => 0.9421095463638939), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984679912, \"vm\" => 0.9409689065116826), \"10\" => Dict{String, Any}(\"va\" => 5.0185159268929675, \"vm\" => 0.9048635910623125), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541200902, \"vm\" => 0.967421494353016)))), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"nw\" => Dict{String, Dict{String, Any}}(\"4\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180879746, 449.1439873945076, 448.7567158126756], \"qt\" => [-400.3834881406001, -449.61753973455666, -449.40808066075476], \"pt\" => [-1202.2047813968609, -900.9716820211081, -901.437570378043], \"pf\" => [1204.092342226798, 901.8028241168121, 902.6707125959695]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159633698, 449.61909326817045, 449.40944838966254], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.206724198158, 900.9725348138786, 901.4388339186033]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.3834881406001, 449.61753973455666, 449.40808066075476], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2047813968609, 900.9716820211081, 901.437570378043]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103770306, 449.147016724407, 448.75940230925625], \"qt\" => [-400.3857159633698, -449.61909326817045, -449.40944838966254], \"pt\" => [-1202.206724198158, -900.9725348138786, -901.4388339186033], \"pf\" => [1204.0959489625075, 901.8044071741432, 902.673061143103])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.60383553276677, 449.1607731500957, 448.77317528774904], [-400.5820103770306, -449.147016724407, -448.75940230925625]], \"p\" => [[1204.0981313859945, 901.8057826939303, 902.6744388456775], [-1204.0959489625075, -901.8044071741432, -902.673061143103]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.59952401926625, 449.1577317466543, 448.77047663804154], [-400.5777180879746, -449.1439873945076, -448.7567158126756]], \"p\" => [[1204.0945224674979, 901.804198545205, 902.672088661453], [-1204.092342226798, -901.8028241168121, -902.6707125959695]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799057324, -120.79137859901346, 119.2504000096645], \"vm\" => [7.472201725143692, 7.48392238161073, 7.479449806375467]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194665752, -120.77035368944988, 119.22965458272802], \"vm\" => [125.00492912857915, 125.0049742054994, 125.00503001738106]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115394987, -120.78074600616584, 119.23848685007212], \"vm\" => [7.487284000425346, 7.492696895897028, 7.490619086774545]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.855042232531755, -120.83663088144945, 119.18261888118052], \"vm\" => [7.484002753336548, 7.489418049928727, 7.487339328524334]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550666929, -120.77101852028557, 119.22898904907676], \"vm\" => [7.500242832893439, 7.500243675517293, 7.50024705477223]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989754781323, -120.82622950863666, 119.173778769923], \"vm\" => [124.95033736057859, 124.95038246062096, 124.95043829748143]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029028977026, -120.8268949215367, 119.17311265297246], \"vm\" => [7.496967303220576, 7.496968146567504, 7.496971527361585]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649359917, -120.84727282112708, 119.19454256329932], \"vm\" => [7.468913830909152, 7.480639684348965, 7.476165145424161])), \"per_unit\" => false), \"1\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.57771808779745, 449.1439873947322, 448.7567158126303], \"qt\" => [-400.38348814059987, -449.6175397346913, -449.40808066071014], \"pt\" => [-1202.204781396862, -900.9716820213755, -901.4375703783082], \"pf\" => [1204.09234222689, 901.8028241171684, 902.6707125964111]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159634153, 449.6190932679933, 449.40944838961826], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241982484, 900.9725348139676, 901.4388339183369]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.38348814059987, 449.6175397346913, 449.40808066071014], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.204781396862, 900.9716820213755, 901.4375703783082]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103772543, 449.14701672423075, 448.75940230921145], \"qt\" => [-400.3857159634153, -449.6190932679933, -449.40944838961826], \"pt\" => [-1202.2067241982484, -900.9725348139676, -901.4388339183369], \"pf\" => [1204.095948962688, 901.8044071742323, 902.6730611427464])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.60383553298436, 449.16077317266615, 448.77317528770436], [-400.5820103772543, -449.14701672423075, -448.75940230921145]], \"p\" => [[1204.0981315680738, 901.8057830578177, 902.6744392091184], [-1204.095948962688, -901.8044071742323, -902.6730611427464]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.59952401908913, 449.15773174687035, 448.7704766493643], [-400.57771808779745, -449.1439873947322, -448.7567158126303]], \"p\" => [[1204.0945221037925, 901.8041985455613, 902.6720886618943], [-1204.09234222689, -901.8028241171684, -902.6707125964111]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.830229579920092, -120.79137859902801, 119.25040000964974], \"vm\" => [7.4722017251430914, 7.483922381610104, 7.479449806374842]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194809523, -120.77035368946459, 119.22965458271331], \"vm\" => [125.0049291285691, 125.00497420548916, 125.00503001737073]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115538781, -120.78074600618037, 119.23848685005738], \"vm\" => [7.4872840004247445, 7.4926968958964055, 7.490619086773919]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.8550422325640687, -120.83663088148208, 119.18261888114806], \"vm\" => [7.484002753335518, 7.489418049927689, 7.487339328523306]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550810701, -120.77101852030012, 119.22898904906208], \"vm\" => [7.5002428328928366, 7.500243675516679, 7.5002470547716085]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989755103133, -120.826229508669, 119.17377876989066], \"vm\" => [124.95033736056153, 124.95038246060375, 124.95043829746425]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.827402902930025, -120.82689492156933, 119.17311265293998], \"vm\" => [7.4969673032195505, 7.496968146566467, 7.496971527360553]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649683284, -120.84727282115972, 119.19454256326688], \"vm\" => [7.468913830908116, 7.4806396843479295, 7.476165145423132])), \"per_unit\" => false), \"2\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180878409, 449.1439873945529, 448.75671581271985], \"qt\" => [-400.3834881405547, -449.6175397345132, -449.40808066079904], \"pt\" => [-1202.2047813968604, -900.9716820211088, -901.4375703779534], \"pf\" => [1204.0923422269757, 901.8028241166346, 902.6707125959689]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159633255, 449.6190932685255, 449.40944838966266], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241982472, 900.9725348141451, 901.4388339188698]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.3834881405547, 449.6175397345132, 449.40808066079904], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2047813968604, 900.9716820211088, 901.4375703779534]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.58201037707516, 449.1470167248505, 448.75940230925687], \"qt\" => [-400.3857159633255, -449.6190932685255, -449.40944838966266], \"pt\" => [-1202.2067241982472, -900.9725348141451, -901.4388339188698], \"pf\" => [1204.095948962507, 901.8044071744985, 902.6730611437251])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.6038355441561, 449.16077316190854, 448.7731752991101], [-400.58201037707516, -449.1470167248505, -448.75940230925687]], \"p\" => [[1204.098131204093, 901.8057832399824, 902.6744390281976], [-1204.095948962507, -901.8044071744985, -902.6730611437251]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.5995240305012, 449.157731758069, 448.77047663808975], [-400.5777180878409, -449.1439873945529, -448.75671581271985]], \"p\" => [[1204.0945224676755, 901.8041985450279, 902.6720886614527], [-1204.0923422269757, -901.8028241166346, -902.6707125959689]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799209277, -120.79137859902852, 119.25040000964935], \"vm\" => [7.472201725143105, 7.483922381610151, 7.479449806374883]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194816114, -120.77035368946491, 119.22965458271298], \"vm\" => [125.00492912856943, 125.00497420548972, 125.00503001737137]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.79914131155471, -120.78074600618085, 119.23848685005699], \"vm\" => [7.48728400042476, 7.492696895896448, 7.4906190867739575]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.85504223255677, -120.83663088147543, 119.18261888115482], \"vm\" => [7.4840027533357, 7.489418049927836, 7.487339328523451]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.77152605508187, -120.77101852030057, 119.2289890490616], \"vm\" => [7.500242832892855, 7.5002436755167095, 7.500247054771646]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.826498975503429, -120.82622950866259, 119.1737787698974], \"vm\" => [124.95033736056432, 124.95038246060629, 124.95043829746685]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029029227165, -120.82689492156277, 119.17311265294684], \"vm\" => [7.496967303219722, 7.496968146566622, 7.49697152736071]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649610355, -120.84727282115303, 119.19454256327364], \"vm\" => [7.468913830908303, 7.480639684348074, 7.476165145423272])), \"per_unit\" => false), \"3\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180877519, 449.1439873945082, 448.75671581263083], \"qt\" => [-400.38348814055513, -449.6175397345571, -449.4080806607989], \"pt\" => [-1202.20478139695, -900.9716820211972, -901.4375703778643], \"pf\" => [1204.092342226887, 901.8028241168124, 902.6707125957021]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.38571596332577, 449.6190932680813, 449.40944838961764], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241981586, 900.9725348138778, 901.4388339183367]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.38348814055513, 449.6175397345571, 449.4080806607989], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.20478139695, 900.9716820211972, 901.4375703778643]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103769862, 449.14701672440617, 448.759402309122], \"qt\" => [-400.38571596332577, -449.6190932680813, -449.40944838961764], \"pt\" => [-1202.2067241981586, -900.9725348138778, -901.4388339183367], \"pf\" => [1204.0959489624188, 901.8044071739638, 902.6730611429242])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.6038355327163, 449.16077315009466, 448.773175287606], [-400.5820103769862, -449.14701672440617, -448.759402309122]], \"p\" => [[1204.0981315678043, 901.8057826937508, 902.6744388454978], [-1204.0959489624188, -901.8044071739638, -902.6730611429242]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.5995240190437, 449.1577317239183, 448.7704766379962], [-400.5777180877519, -449.1439873945082, -448.75671581263083]], \"p\" => [[1204.0945224675868, 901.8041985452063, 902.6720886611851], [-1204.092342226887, -901.8028241168124, -902.6707125957021]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799131064, -120.79137859902089, 119.25040000965717], \"vm\" => [7.4722017251435435, 7.483922381610589, 7.479449806375325]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194739376, -120.77035368945725, 119.22965458272064], \"vm\" => [125.00492912857676, 125.00497420549705, 125.00503001737864]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115468873, -120.78074600617322, 119.23848685006479], \"vm\" => [7.487284000425199, 7.492696895896888, 7.490619086774399]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.85504223254311, -120.8366308814605, 119.18261888116959], \"vm\" => [7.484002753336263, 7.489418049928443, 7.487339328524058]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550740553, -120.77101852029291, 119.2289890490694], \"vm\" => [7.500242832893295, 7.500243675517153, 7.500247054772084]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989754893535, -120.82622950864773, 119.17377876991193], \"vm\" => [124.95033736057383, 124.95038246061625, 124.95043829747675]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029029090649, -120.82689492154778, 119.17311265296155], \"vm\" => [7.496967303220288, 7.496968146567221, 7.496971527361306]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649473606, -120.84727282113812, 119.19454256328841], \"vm\" => [7.468913830908865, 7.480639684348685, 7.4761651454238836])), \"per_unit\" => false)))\n\n[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}(\"multinetwork\" => true, \"nw\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049622880614, -901.8100181254906, -902.6783506307055], \"qbound_to\" => [-400.630030776433, -449.177722118188, -448.78980036204024]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.593331044258], \"qbound_fr\" => [1298.597553256661]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5857746079846], \"qbound_fr\" => [1298.5874491212335]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.101347358377, -901.8084302478388, -902.6759970017687], \"qbound_to\" => [-400.6256962072555, -449.17466583314587, -448.7870870808322]))), \"1\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049624672987, -901.8100184922217, -902.6783509913059], \"qbound_to\" => [-400.6300307993883, -449.17772215213427, -448.78980037337016]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5933319508263], \"qbound_fr\" => [1298.5975533248927]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5857742450717], \"qbound_fr\" => [1298.5874491439454]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013469861416, -901.8084302538781, -902.6759970050523], \"qbound_to\" => [-400.6256961956958, -449.17466584472527, -448.78708710352413]))), \"2\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049621118384, -901.8100186687032, -902.6783508103842], \"qbound_to\" => [-400.63003079917036, -449.17772213001075, -448.7898003847704]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.593331590926], \"qbound_fr\" => [1298.5975533139513]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.585774607983], \"qbound_fr\" => [1298.5874491439235]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013473528665, -901.8084302476616, -902.6759970074544], \"qbound_to\" => [-400.6256962184772, -449.1746658331913, -448.7870870922549]))), \"3\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049624727136, -901.8100181281534, -902.6783506390512], \"qbound_to\" => [-400.6300307763823, -449.1777221295564, -448.7898003846302]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5933312399184], \"qbound_fr\" => [1298.5975532905688]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.58577461065], \"qbound_fr\" => [1298.587449086865]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013473527794, -901.8084302506836, -902.6759970071865], \"qbound_to\" => [-400.62569618428887, -449.1746658104148, -448.7870870921613])))))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"As you can see on the output, the dictionary results have extra keys such as nw, which indicate that this is a multinetwork (multi-timestep) optimization problem. Below the nw, you can find the solutions of the respective multinetwork (i.e., timestep) as \"#\" (e.g., [\"nw\"][\"3\"] represents the results for the 3th timestep).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#3:-Solving-OPFITD-with-voltage-bounds-(support-for-PowerModelsDistribution-(PMD)-Transformations)","page":"Beginners Guide","title":"Example Case #3: Solving OPFITD with voltage bounds (support for PowerModelsDistribution (PMD) Transformations)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#3","page":"Beginners Guide","title":"Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Additionally, we are specifying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#3","page":"Beginners Guide","title":"Julia Code for Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\n# apply transformations\napply_voltage_bounds!(data; vm_lb=0.99, vm_ub=1.01)\n# solve the optimization problem\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer; make_si=false) # solve the opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#3","page":"Beginners Guide","title":"Console Output for Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 18022.355809587236 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.06421494483947754 [seconds]\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.8977463887653532, -120.78309685941274, 119.34177620647625], \"vm\" => [0.9899999900302301, 0.9946671975187621, 0.9928991397184561]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.7693363623113275, -120.76782278704773, 119.23219208890347], \"vm\" => [0.999742728740167, 0.999743306402737, 0.9997446568367797]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8297020935620707, -120.77556386286943, 119.28178890967312], \"vm\" => [0.9952384467648019, 0.9973943491437465, 0.9965725113327532]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7671158858601453, -120.76631338622572, 119.23370678684667], \"vm\" => [0.9997629892456953, 0.9997641961144075, 0.9997655262819723]))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"You can see in these results that the voltage magnitude values of the distribution system nodes is between the 0.99 and 1.01 bounds.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#4:-Solving-OPFITD-with-Solution-Processors-(apply-solution-processor-to-convert-voltage-values-solutions-from-rectangular-to-polar-coordinates)","page":"Beginners Guide","title":"Example Case #4: Solving OPFITD with Solution Processors (apply solution processor to convert voltage values solutions from rectangular to polar coordinates)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#4","page":"Beginners Guide","title":"Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Finally, we also want to solve this problem using the ACR-ACRU formulation (i.e., AC OPF in rectangular coordinates) instead of the ACP-ACPU formulation used previously. We also want to show that by applying the solution processor to the solve_opfitd(...) function, we can convert the solution from rectangular to polar coordinates (after the problem has been solved in rectangular coordinates).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#4","page":"Beginners Guide","title":"Julia Code for Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACRPowerModel, ACRUPowerModel} # type of formulation to be used\n\ndata_rect = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary - rectangular\ndata_polar = deepcopy(data_rect) # parse files into dictionary - polar\n\n# apply voltage bounds to both datasets\napply_voltage_bounds!(data_rect; vm_lb=0.99, vm_ub=1.01)\napply_voltage_bounds!(data_polar; vm_lb=0.99, vm_ub=1.01)\n\n# solve the optimization problem\nresult_rect = solve_opfitd(data_rect, formulation, Ipopt.Optimizer; make_si=false) # solve the opfitd, present result in rectangular\nresult_polar = solve_opfitd(data_polar, formulation, Ipopt.Optimizer; make_si=false, solution_processors=[sol_data_model!]) # solve the opfitd, present the result in polar\n\n# Check the result\n@info \"Distribution system(s) voltages in rectangular coordinates: $(result_rect[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"\n@info \"Distribution system(s) voltages in polar coordinates: $(result_polar[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#4","page":"Beginners Guide","title":"Console Output for Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Distribution system(s) voltages in rectangular coordinates: Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"vi\" => [-0.015511309363640641, -0.8545294554234174, 0.8655223138026301], \"vr\" => [0.9898784720063777, -0.5090601668099762, -0.4865386272048753]), \"3bus_unbal.substation\" => Dict{String, Any}(\"vi\" => [-0.013423594907906103, -0.8590267647200966, 0.872425011363218], \"vr\" => [0.9996526099437699, -0.5114290820733716, -0.48822534573738224]), \"3bus_unbal.primary\" => Dict{String, Any}(\"vi\" => [-0.014411577636549404, -0.8569394862376708, 0.8692352392326611], \"vr\" => [0.9951341025954522, -0.5103432319817417, -0.4874288450833038]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"vi\" => [-0.01338512498983875, -0.8590581872270858, 0.8724303155121654], \"vr\" => [0.9996733881089848, -0.5114171375591623, -0.4882586014767347]))\n\n[ Main | Info ] : Distribution system(s) voltages in polar coordinates: Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.8977463956228972, -120.78309686739179, 119.34177619725007], \"vm\" => [0.989999994979725, 0.9946672024445378, 0.9928991446530021]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.7693363704348831, -120.76782279518537, 119.23219208076581], \"vm\" => [0.9997427336408314, 0.9997433113034004, 0.9997446617374346]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8297021010938084, -120.77556387092758, 119.28178890104428], \"vm\" => [0.9952384516880516, 0.9973943540560338, 0.9965725162491212]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.767115894005601, -120.7663133943784, 119.23370677869384], \"vm\" => [0.9997629941462579, 0.9997642010149662, 0.9997655311825235]))","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#5:-Solving-OPFITD-with-Results-in-MATH-Model-(instead-of-default-ENG)","page":"Beginners Guide","title":"Example Case #5: Solving OPFITD with Results in MATH Model (instead of default ENG)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#5","page":"Beginners Guide","title":"Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"However, different from all the examples presented above, in this case, the result of the distribution systems will be obtained in the MATH model instead of the default ENG model. See here for a more detailed explanation regarding the different models supported by PMD/PMITD.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#5","page":"Beginners Guide","title":"Julia Code for Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer; solution_model=\"MATH\") # solve the opfitd, present result in MATH model instead of default ENG\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values (MATH model) for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values (MATH model) for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"\n","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#5","page":"Beginners Guide","title":"Console Output for Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 17953.746512039743 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.07705187797546387 [seconds]\n\n[ Main | Info ] : Solution Values (MATH model) for Distribution system(s): Dict{String, Any}(\"branch\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qf\" => [1354.795202241865, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.6163225169614, -1507.2344513630767, -1504.4700979169072], \"pt\" => [-3367.119671256992, -2346.3650144634003, -2354.829891017304], \"pf\" => [3367.119671256992, 2346.3650144634003, 2354.8298910173044]), \"1\" => Dict{String, Any}(\"qf\" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], \"qt\" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], \"pt\" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], \"pf\" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), \"5\" => Dict{String, Any}(\"qf\" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.795202241865, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.119671256992, -2346.3650144634003, -2354.8298910173044], \"pf\" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), \"2\" => Dict{String, Any}(\"qf\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"qt\" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], \"pt\" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], \"pf\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895]), \"6\" => Dict{String, Any}(\"qf\" => [1355.0096276913357, 1507.4706735124998, 1504.7037665348369], \"qt\" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], \"pf\" => [3367.1850486607445, 2346.4026604158908, 2354.8649645151804]), \"3\" => Dict{String, Any}(\"qf\" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], \"qt\" => [1354.6163225169614, 1507.2344513630767, 1504.4700979169072], \"pt\" => [3367.119671256992, 2346.3650144634003, 2354.829891017304], \"pf\" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), \"gen\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qg_bus\" => [-0.0, -0.0, -0.0], \"qg\" => [-0.0, -0.0, -0.0], \"pg\" => [666.6676628468832, 666.6676628064197, 666.6676628099706], \"pg_bus\" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), \"transformer\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qf\" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], \"pf\" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), \"2\" => Dict{String, Any}(\"qf\" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], \"qt\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"pt\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895], \"pf\" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), \"settings\" => Dict{String, Any}(\"sbase_default\" => 100000.0, \"vbases_default\" => Dict{String, Real}(\"4\" => 132.79056191361394), \"voltage_scale_factor\" => 1000.0, \"sbase\" => 100000.0, \"power_scale_factor\" => 1000.0, \"base_frequency\" => 60.0), \"multinetwork\" => false, \"load\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"2\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3\" => Dict{String, Any}(\"qd_bus\" => [1333.3300000000002], \"pd_bus\" => [4000.0], \"qd\" => [1333.3300000000002], \"pd\" => [4000.0])), \"bus\" => Dict{String, Any}(\"8\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [0.5427404621782935, 0.5427412225103798, 0.5427420415368795]), \"4\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [124.83030630100751, 124.83048117738736, 124.8306695534823]), \"1\" => Dict{String, Any}(\"va\" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], \"vm\" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), \"5\" => Dict{String, Any}(\"va\" => [-0.8089868491003656, -120.80727720360223, 119.19273784447546], \"vm\" => [0.5427292370876581, 0.542729249043147, 0.5427300853404582]), \"2\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), \"6\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [0.5427279962777596, 0.5427283843894555, 0.5427292175687293]), \"7\" => Dict{String, Any}(\"va\" => [-0.8063670574676239, -120.8054516152584, 119.19457001333551], \"vm\" => [0.5427392213907619, 0.5427403578738178, 0.5427411737823131]), \"9\" => Dict{String, Any}(\"va\" => [-0.8036120919989638, -120.80361209199894, 119.19638790800104], \"vm\" => [124.83485996888251, 124.83485996888251, 124.83485996888251]), \"3\" => Dict{String, Any}(\"va\" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], \"vm\" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505])), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values (MATH model) for Boundary(ies): Dict{String, Any}(\"multinetwork\" => false, \"boundary\" => Dict{String, Any}(\"(100001, 9, 5)\" => Dict{String, Any}(\"pbound_to\" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], \"qbound_to\" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369]), \"(100001, 5, 9)\" => Dict{String, Any}(\"pbound_fr\" => [8068.452673591816], \"qbound_fr\" => [4367.184067738673])))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"As seen in the console output, the nodes/buses are now referenced by their MATH names (i.e., numbers) and not their actual ENG name.","category":"page"},{"location":"manual/formulations.html#ITD-Network-Formulations","page":"Formulations","title":"ITD Network Formulations","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported ITD boundary mathematical formulations is presented below.","category":"page"},{"location":"manual/formulations.html#Sets,-Parameters,-and-(General)-Variables","page":"Formulations","title":"Sets, Parameters, and (General) Variables","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxsets nonumber \n N mbox - Set of busesnonumber \n mathcalT mbox - Belongs to transmission networknonumber \n mathcalD mbox - Belongs to distribution networknonumber \n mathcalB mbox - Set of boundary linksnonumber \n\nmboxparameters nonumber \n Re mbox - Real partnonumber \n Im mbox - Imaginary partnonumber \n Phi = a b c mbox - Multi-conductor phasesnonumber \n chi rightarrowmathcalTmathcalD mbox - Belongs to Transmission or Distributionnonumber \n beta^^chi mbox - Boundary busnonumber \n\nmboxvariables nonumber \n P_beta^^mathcalTbeta^^mathcalD^^mathcalT mbox - Active power flow from Transmisison boundary bus to Distribution boundary busnonumber \n Q_beta^^mathcalTbeta^^mathcalD^^mathcalT mbox - Reactive power flow from Transmisison boundary bus to Distribution boundary busnonumber \n P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi mbox - Active power flow from Distribution boundary bus phase varphi to Transmission boundary busnonumber \n Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi mbox - Reactive power flow from Distribution boundary bus phase varphi to Transmission boundary busnonumber \n V_i^^mathcalT mbox - Voltage magnitude at bus inonumber \n theta_i^^mathcalT mbox - Voltage angle at bus inonumber \n v_i^mathcalD varphi mbox - Voltage magnitude at bus i phase varphinonumber \n theta_i^mathcalD varphi mbox - Voltage angle at bus i phase varphinonumber \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACP-ACPU","page":"Formulations","title":"ACP-ACPU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLPowerModelITD{ACPPowerModel, ACPUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACP to ACPU (AC polar to AC polar unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Polar\nVariables: Power-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n V_beta^^mathcalT = v_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n V_beta^^mathcalT = v_beta^^mathcalD^^b forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n V_beta^^mathcalT = v_beta^^mathcalD^^c forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n theta_beta^^mathcalT = theta_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n theta_beta^^mathcalD^^b = (theta_beta^^mathcalD^^a -120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n theta_beta^^mathcalD^^c = (theta_beta^^mathcalD^^a +120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-ACRU","page":"Formulations","title":"ACR-ACRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLPowerModelITD{ACRPowerModel, ACRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to ACRU (AC rectangular to AC rectangular unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#IVR-IVRU","page":"Formulations","title":"IVR-IVRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"IVRPowerModelITD{IVRPowerModel, IVRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"IVR to IVRU (AC-IV rectangular to AC-IV rectangular unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Current-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n V^Re_beta^^mathcalT ReBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) + V^Im_beta^^mathcalT ImBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) = -Biggsum_varphi in Phi Bigg( Big(v_beta^^mathcalD^^varphiReBig) ReBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) + Big(v_beta^^mathcalD^^varphiImBig) ImBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) Bigg) Bigg forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n V^Im_beta^^mathcalT ReBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) - V^Re_beta^^mathcalT ImBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) = - Biggsum_varphi in Phi Bigg( Big(v_beta^^mathcalD^^varphiImBig) ReBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) - Big(v_beta^^mathcalD^^varphiReBig) ImBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) Bigg) Bigg forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#NFA-NFAU","page":"Formulations","title":"NFA-NFAU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"LPowerModelITD{NFAPowerModel, NFAUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NFA to NFAU (Linear Network flow approximation to Linear Network flow approximation unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: N/A\nVariables: N/A\nModel(s): Apprx.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-FBSUBF","page":"Formulations","title":"ACR-FBSUBF","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to FBSUBF (AC rectangular to forward-backward sweep unbalanced branch flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-FOTRU","page":"Formulations","title":"ACR-FOTRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to FOTRU (AC rectangular to first-order Taylor rectangular unbalanced approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACP-FOTPU","page":"Formulations","title":"ACP-FOTPU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACP to FOTPU (AC rectangular to first-order Taylor polar unbalanced approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Polar\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n V_beta^^mathcalT = v_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n V_beta^^mathcalT = v_beta^^mathcalD^^b forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n V_beta^^mathcalT = v_beta^^mathcalD^^c forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n theta_beta^^mathcalT = theta_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n theta_beta^^mathcalD^^b = (theta_beta^^mathcalD^^a -120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n theta_beta^^mathcalD^^c = (theta_beta^^mathcalD^^a +120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#BFA-LinDist3Flow","page":"Formulations","title":"BFA-LinDist3Flow","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFPowerModelITD{BFAPowerModel, LinDist3FlowPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFA to LinDist3Flow (Branch flow approximation to LinDist3Flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: W-space\nVariables: Power-Voltage (W)\nModel(s): Apprx.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(w_beta^^mathcalT Big) = Big(w^a_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase a \n Big(w_beta^^mathcalT Big) = Big(w^b_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase b \n Big(w_beta^^mathcalT Big) = Big(w^c_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#SOCBF-LinDist3Flow","page":"Formulations","title":"SOCBF-LinDist3Flow","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFPowerModelITD{SOCBFPowerModel, LinDist3FlowPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"SOCBF to LinDist3Flow (Second-order cone branch flow relaxation to LinDist3Flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: W-space\nVariables: Power-Voltage (W)\nModel(s): Relax.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(w_beta^^mathcalT Big) = Big(w^a_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase a \n Big(w_beta^^mathcalT Big) = Big(w^b_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase b \n Big(w_beta^^mathcalT Big) = Big(w^c_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase c \n\nendalign","category":"page"},{"location":"manual/storage.html#Quick-Guide-on-Storage-(with-Costs)-Problem-Specification","page":"Storage","title":"Quick Guide on Storage (with Costs) Problem Specification","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"In this guide, we will discuss the differences between the two problem specifications currently available in PowermodelsITD that consider storage devices when performing OPF.","category":"page"},{"location":"manual/storage.html#TL;DR","page":"Storage","title":"TL;DR","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"solve_opfitd(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), but, no cost is added to the objective cost function. In other words, cycling/using the storage devices is a free operation.\nsolve_opfitd_storage(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), and cost term(s) are added to the objective cost function. In other words, cycling/using the storage devices is not free and the specific cost of using the storage device is added to the cost function as sd times cost, where sd is the amount of power discharged and cost is a scalar value in units $/kWh or $/pu.","category":"page"},{"location":"manual/storage.html#Default-Costs-and-Units","page":"Storage","title":"Default Costs and Units","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"By default, the costs of the storage devices are calculated based on the references shown below. However, users are encouraged to assign their own costs after parsing files.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Transmission cost must be in $/pu units.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"(e.g., transformation from $/MWh -> $/pu: 200 $/MWh x 100 MVA base/1 pu = 20,000 $/pu)","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Distribution cost must be in $/kWh units.\nDefault costs of storage devices (in $/kWh) are computed based on Eq. (23) from this publication.\nThe total cost of the storage system, C_total^ES, is estimated based on NREL data obtained from this resource.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\n\ncost = c_epsilon varepsilon = dfracC_total^ESCyccdot E__ES^maxcdot DoDcdot eta_r\n\nendalign","category":"page"},{"location":"manual/storage.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-with-Storage-Costs","page":"Storage","title":"Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The snippet below shows how to run a steady-state Integrated Transmission-Distribution (ITD) AC Optimal Power Flow with storage costs. All of these files can be found in test folder of the repository.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = \"case5_withload.m\"\npmd_file = \"case3_balanced_withBattery.dss\"\npmitd_file = \"case5_case3_bal_battery.json\"\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\npmitd_data = parse_files(pm_file, pmd_file, pmitd_file)\n\n# cost to assign to energy storage\n# Units $/kWh\nstrg_cost = 0.025\n\n# add cost to storages in PMD\nfor (st_name, st_data) in pmitd_data[\"it\"][\"pmd\"][\"storage\"]\n st_data[\"cost\"] = strg_cost\nend\n\n# solve optimization with storage cost problem\npmitd_result_strg = solve_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)\n","category":"page"},{"location":"manual/storage.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-with-Storage-Costs-Multinetwork","page":"Storage","title":"Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs Multinetwork","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Running a multinetwork (i.e., multi-timestep) is also very simple. Only slight changes are required (assuming multinetwork data exists in the distribution files) as seen in the snippet shown below.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = \"case5_withload.m\"\npmd_file = \"case3_balanced_withBattery_mn_diff.dss\"\npmitd_file = \"case5_case3_bal_battery_mn.json\"\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\npmitd_data = parse_files(pm_file, pmd_file, pmitd_file; multinetwork=true)\n\n# cost to assign to energy storage\n# Units $/kWh\nstrg_cost = 0.0025\n\n# add cost to storages in PMD\nfor (nw_id, nw_data) in pmitd_data[\"it\"][\"pmd\"][\"nw\"]\n for (st_name, st_data) in nw_data[\"storage\"]\n st_data[\"cost\"] = strg_cost\n end\nend\n\npmitd_result_strg = solve_mn_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)\n","category":"page"},{"location":"manual/storage.html#How-are-the-Storage-Devices-Modeled?","page":"Storage","title":"How are the Storage Devices Modeled?","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The storage mathematical model (for both transmission and distribution system(s)) are based on the model shown here. Given the storage data model and two sequential time points s and t, the storage component's mathematical model is given by,","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\n\nmboxdata nonumber \n e^u mbox - energy rating nonumber \n sc^u mbox - charge rating nonumber \n sd^u mbox - discharge rating nonumber \n eta^c mbox - charge efficiency nonumber \n eta^d mbox - discharge efficiency nonumber \n te mbox - time elapsed nonumber \n S^l mbox - power losses nonumber \n Z mbox - injection impedance nonumber \n q^l q^u mbox - reactive power injection limits nonumber \n s^u mbox - thermal injection limit nonumber \n i^u mbox - current injection limit nonumber \n\nmboxvariables nonumber \n e_i in (0 e^u) mbox - storage energy at time i labelvar_strg_energy \n sc_i in (0 sc^u) mbox - charge amount at time i labelvar_strg_charge \n sd_i in (0 sd^u) mbox - discharge amount at time i labelvar_strg_discharge \n sqc_i mbox - reactive power slack at time i labelvar_strg_qslack \n S_i mbox - complex bus power injection at time i labelvar_strg_power \n I_i mbox - complex bus current injection at time i labelvar_strg_current \n\nmboxsubject to nonumber \n e_t - e_s = te left(eta^c sc_t - fracsd_teta^d right) labeleq_strg_energy \n sc_t cdot sd_t = 0 labeleq_strg_compl \n S_t + (sd_t - sc_t) = j cdot sqc_t + S^l + Z I_t^2 labeleq_strg_loss \n q^l leq Im(S_t) leq q^u labeleq_strg_q_limit \n S_t leq s^u labeleq_strg_thermal_limit \n I_t leq i^u labeleq_strg_current_limit\nendalign","category":"page"},{"location":"manual/storage.html#What-is-the-Cost-(Objective)-Function?","page":"Storage","title":"What is the Cost (Objective) Function?","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The cost (objective) function of the solve_opfitd_storage(...) and solve_mn_opfitd_storage(...) is based on the mathematical model:","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\nbeginsplit\n textmin bigg(sum_k in G^^mathcalT c_2k(P_gk^mathcalT)^2 + c_1k(P_gk^mathcalT) + c_0k bigg) +\n bigg(sum_epsilon in E^^mathcalT c_epsilon(sd_epsilon^mathcalT)bigg) +\n bigg(sum_m in G^^mathcalD c_2m(sum_varphi in Phi P_gm^mathcalDvarphi)^2 + c_1m(sum_varphi in Phi P_gm^mathcalDvarphi) + c_0m bigg) +\n bigg(sum_varepsilon in E^^mathcalD c_varepsilon(sd_varepsilon^mathcalD)bigg)\nendsplit\nendalign","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"As observed, the costs of discharging the storage devices for both Transmission and Distribution system(s) are added the cost function of the OPFITD. This means that storage devices will only discharge power to the grid when the cost of charging + discharging energy is less than the cost of not using (cycling) the storage device.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"This cost function only cosiders cost as a factor for determining when to use the storage devices, however, it is important to note that users are encouraged to create their own cost functions that consider other factors (e.g., voltage deviations) that will make the storage devices operate more often, as needed.","category":"page"},{"location":"reference/base.html#Base","page":"Base","title":"Base","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"ref\nvar\nids\ncon\nsol\nnws\nnw_ids","category":"page"},{"location":"reference/base.html#PowerModelsITD.ref","page":"Base","title":"PowerModelsITD.ref","text":"helper function to access the AbstractPowerModelITD structs' ref, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.var","page":"Base","title":"PowerModelsITD.var","text":"helper function to access the AbstractPowerModelITD structs' var, returns JuMP VariableRef\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.ids","page":"Base","title":"PowerModelsITD.ids","text":"helper function to access the ids of AbstractPowerModelITD structs' ref, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.con","page":"Base","title":"PowerModelsITD.con","text":"helper function to access the AbstractPowerModelITD structs' con, returns JuMP Constraint\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.sol","page":"Base","title":"PowerModelsITD.sol","text":"helper function to access the AbstractPowerModelITD structs' sol, returns Dict\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.nws","page":"Base","title":"PowerModelsITD.nws","text":"helper function to access multinetwork data from AbstractPowerModelITD structs, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.nw_ids","page":"Base","title":"PowerModelsITD.nw_ids","text":"helper function to access the ids of multinetworks from AbstractPowerModelITD structs, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Helper-functions","page":"Base","title":"Helper functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"silence!","category":"page"},{"location":"reference/base.html#PowerModelsITD.silence!","page":"Base","title":"PowerModelsITD.silence!","text":"Suppresses information and warning messages output by PowerModels and PowerModelsDistribution\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Ref-Creation-Functions","page":"Base","title":"Ref Creation Functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"ref_\")","category":"page"},{"location":"reference/base.html#PowerModelsITD.ref_add_core!-Tuple{Dict{Symbol}}","page":"Base","title":"PowerModelsITD.ref_add_core!","text":"function ref_add_core!(ref::Dict{Symbol,Any})\n\nReturns a dict that stores commonly used pre-computed data obtained from the data dictionary, primarily for converting data-types, filtering out loads in the transmission-side system, removing slack generators in the distribution-side system, and storing system-wide values that need to be computed globally. Some of the common keys include:\n\nSee ref_add_core!(ref) from PowerModels),\nSee ref_add_core!(ref) from PowerModelsDistribution),\n:boundary – the set of boundary elements that are active in the network,\n:arcs_boundary_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:boundary]],\n:arcs_boundary_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:boundary]],\n:arcs_boundary – the set of arcs from both arcs_boundary_from and arcs_boundary_to,\n:bus_arcs_boundary_from – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_from]]),\n:bus_arcs_boundary_to – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_to]]).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current","text":"Boundary current flow variables - IVR cases (Current Real and Current Imaginary)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_imaginary_from-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_imaginary_from","text":"Variable: cibound_fr[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_imaginary_to-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_imaginary_to","text":"Variable: cibound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_real_from-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_real_from","text":"Variable: crbound_fr[l,i,j] for (l,i,j) in arcs bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_real_to-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_real_to","text":"Variable: crbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power-Tuple{AbstractLPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power","text":"Boundary power flow variables - DC cases (P-only)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power","text":"Boundary power flow variables - AC cases (P and Q)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_imaginary_from-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_imaginary_from","text":"Variable: qbound_fr[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_imaginary_to-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_imaginary_to","text":"Variable: qbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_real_from-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_real_from","text":"Variable: pbound_fr[l,i,j] for (l,i,j) in arcs bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_real_to-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_real_to","text":"Variable: pbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constants.html#ConstantsAPI","page":"Constants","title":"Constants","text":"","category":"section"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"BOUNDARY_NUMBER","category":"page"},{"location":"reference/constants.html#PowerModelsITD.BOUNDARY_NUMBER","page":"Constants","title":"PowerModelsITD.BOUNDARY_NUMBER","text":"BOUNDARY_NUMBER constant that determines the starting counter for the boundaries defined.\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:constant]\nFilter = t -> isa(t, Dict) || isa(t, Vector) || isa(t, String)","category":"page"},{"location":"reference/data_models.html#DataModelAPI","page":"Data Models","title":"Data Models and Parsers","text":"","category":"section"},{"location":"reference/data_models.html#Parsers","page":"Data Models","title":"Parsers","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"parse_files\nparse_json\nparse_link_file\nparse_power_transmission_file\nparse_power_distribution_file","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.parse_files","page":"Data Models","title":"PowerModelsITD.parse_files","text":"function parse_files(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String;\n multinetwork::Bool=false\n auto_rename::Bool=false\n)\n\nParses PowerModels, PowerModelsDistribution, and PowerModelsITD boundary linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.\n\n\n\n\n\nfunction parse_files(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String;\n multinetwork::Bool=false,\n auto_rename::Bool=false\n)\n\nParses PowerModels, PowerModelsDistribution vector, and PowerModelsITD linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_json","page":"Data Models","title":"PowerModelsITD.parse_json","text":"function parse_json(\n path::String\n)\n\nParses a JavaScript Object Notation (JSON) file from the file path path and returns a dictionary containing the corresponding parsed data. Primarily used for boundry linkage files.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_link_file","page":"Data Models","title":"PowerModelsITD.parse_link_file","text":"function parse_link_file(\n pmitd_file::String\n)\n\nParses a linking file from the file pmitd_file and returns a PowerModelsITD data structured linking network dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_power_transmission_file","page":"Data Models","title":"PowerModelsITD.parse_power_transmission_file","text":"function parse_power_transmission_file(\n pm_file::String;\n skip_correct::Bool = true,\n multinetwork::Bool=false,\n number_multinetworks::Int=0\n)\n\nParses a power transmission file from the file pm_file and returns a PowerModels data structured pm network dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_power_distribution_file","page":"Data Models","title":"PowerModelsITD.parse_power_distribution_file","text":"function parse_power_distribution_file(\n pmd_file::String,\n base_data::Dict{String,<:Any}=Dict{String, Any}();\n unique::Bool=true,\n multinetwork::Bool=false,\n auto_rename::Bool=false,\n ms_num::Int=1\n)\n\nParses power distribution files from the file pmd_file depending on the file extension. base_data represents a dictionary that contains data from other pmd systems (serving as the base where all data will be combined), unique represents if the pmd data provided is the first one passed or unique. If it is not unique, then the components need to be renamed before being added. Returns a PowerModelsDistribution data structured pmd network (a dictionary) with renamed components (if applicable).\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Transformations","page":"Data Models","title":"Data Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nPages = [\"transformations.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.apply_kron_reduction!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_kron_reduction!","text":"function apply_kron_reduction!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation that applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_phase_projection!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_phase_projection!","text":"function apply_phase_projection!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation to apply phase projection: pad matrices and vectors to max number of conductors\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_phase_projection_delta!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_phase_projection_delta!","text":"function apply_phase_projection_delta!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation to apply phase projection delta for components where unprojected states are not yet supported (delta configurations). See [apply_phase_projection!]\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_voltage_angle_difference_bounds!","page":"Data Models","title":"PowerModelsITD.apply_voltage_angle_difference_bounds!","text":"function apply_voltage_angle_difference_bounds!(\n pmitd_data::Dict{String,<:Any},\n vad::Real=5.0\n)\n\nApplies the corresponding transformation of voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines, to the pmd dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.apply_voltage_bounds!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_voltage_bounds!","text":"function apply_voltage_bounds!(\n pmitd_data::Dict{String,<:Any};\n vm_lb::Union{Real,Missing}=0.9,\n vm_ub::Union{Real,Missing}=1.1\n)\n\nApplies the corresponding transformation of voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb) bounds, scaled by the bus' voltage, to the pmd dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.make_lossless!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.make_lossless!","text":"function make_lossless!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation that removes parameters from objects with loss models to make them lossless. This includes switches voltage sources and transformers, which all have loss model parameters that can be omitted.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.remove_all_bounds!","page":"Data Models","title":"PowerModelsITD.remove_all_bounds!","text":"function remove_all_bounds!(\n pmitd_data::Dict{String,<:Any};\n exclude::Vector{<:String}=String[\"energy_ub\"]\n)\n\nApplies the corresponding transformation that removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}. By default, \"energy_ub\" is excluded from this removal, since it is a required property on storage (in pmd).\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Checking-and-Units-Correction","page":"Data Models","title":"Data Checking and Units Correction","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"correct_network_data!\nassign_boundary_buses!\nresolve_units!\nreplicate\nsol_data_model!\ncalc_transmission_branch_flow_ac!\ntransform_pmitd_solution_to_eng!","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.correct_network_data!","page":"Data Models","title":"PowerModelsITD.correct_network_data!","text":"function correct_network_data!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false\n)\n\nCorrects and prepares the data in both pm and pmd dictionaries. Also, assigns the ids given in the boundary linking data to number buses. data is the pmitd dictionary to be corrected and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.assign_boundary_buses!","page":"Data Models","title":"PowerModelsITD.assign_boundary_buses!","text":"function assign_boundary_buses!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false\n)\n\nAssigns the names given in the boundary linking data to number buses in corresponding transmission and distribution networks. data is the pmitd dictionary containing the boundary information and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.resolve_units!","page":"Data Models","title":"PowerModelsITD.resolve_units!","text":"function resolve_units!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false,\n number_multinetworks::Int=0\n)\n\nResolve the units used throughout the disparate datasets by setting the same settings bases. data is the pmitd dictionary to be corrected by resolving units, multinetwork is the boolean that defines if there are multiple networks that need to be corrected, and number_multinetworks defines the number of multinetworks.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.replicate","page":"Data Models","title":"PowerModelsITD.replicate","text":"function replicate(\n sn_data::Dict{String,<:Any},\n count::Int;\n global_keys::Set{String}=Set{String}()\n)\n\nTurns in given single network pmitd data in multinetwork data with a count replicate of the given network. Note that this function performs a deepcopy of the network data. Significant multinetwork space savings can often be achieved by building application specific methods of building multinetwork with minimal data replication. sn_data is the data to be replicated, count is the number of networks to be replicated.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.sol_data_model!","page":"Data Models","title":"PowerModelsITD.sol_data_model!","text":"function sol_data_model!(\n pmitd::AbstractPowerModelITD,\n solution::Dict{String,<:Any}\n)\n\nsolution_processor to convert the solution(s) to polar voltage magnitudes and angles.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.calc_transmission_branch_flow_ac!","page":"Data Models","title":"PowerModelsITD.calc_transmission_branch_flow_ac!","text":"function calc_transmission_branch_flow_ac!(\n result::Dict{String,<:Any},\n pmitd_data::Dict{String,<:Any};\n)\n\nAssumes a valid ac solution is included in the result and computes the branch flow values. Returns the pf solution inside the pmitd_data dictionary (not the result dictionary). Replicates the _PM function but compatible with PMITD dicitionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.transform_pmitd_solution_to_eng!","page":"Data Models","title":"PowerModelsITD.transform_pmitd_solution_to_eng!","text":"function transform_pmitd_solution_to_eng!(\n result::Dict{String,<:Any},\n pmitd_data::Dict{String,<:Any}\n)\n\nTransforms the PMITD solution from MATH to ENG model. This transformation facilitates the conversion in \"pmitd\" of buses numbers to buses names according to the ENG model. Ex: (100002, 9, 6) -> (100002, voltagesource.3busunbalnogenmn_2.source, 6)\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#ObjectiveAPI","page":"Objectives","title":"Objectives","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"objective\")","category":"page"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost","text":"function objective_itd_min_fuel_cost(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization objective.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_polynomial-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_polynomial","text":"function objective_itd_min_fuel_cost_polynomial(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_polynomial_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_polynomial_storage","text":"function objective_itd_min_fuel_cost_polynomial_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_pwl-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_pwl","text":"function objective_itd_min_fuel_cost_pwl(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_storage-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_storage","text":"function objective_itd_min_fuel_cost_storage(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization objective with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization for transmission and minimum load delta objective with storage for distribution objective.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization for transmission and simplified minimum load delta objective (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms in transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms in transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_pwl_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms in transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms in transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_mc_variable_pg_cost-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Objectives","title":"PowerModelsITD.objective_mc_variable_pg_cost","text":"function objective_mc_variable_pg_cost(\n pm::_PMD.AbstractUnbalancedIVRModel\n)\n\nAdds pgcost variables and constraints (IVR formulation) (Copied from PMD and modified to allow differentiation with TD gens (...dist)).\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_mc_variable_pg_cost-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_mc_variable_pg_cost","text":"function objective_mc_variable_pg_cost(\n pm::_PMD.AbstractUnbalancedPowerModel\n)\n\nAdds pgcost variables and constraints (Copied from PMD and modified to allow differentiation with TD gens (...dist)).\n\n\n\n\n\n","category":"method"},{"location":"manual/quickguide.html#Quick-Start-Guide","page":"Getting Started","title":"Quick Start Guide","text":"","category":"section"},{"location":"manual/quickguide.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)","page":"Getting Started","title":"Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD)","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Once PowerModelsITD.jl is installed, Ipopt is installed, and network data files for the transmission system, distribution system(s), and boundary linking (e.g., \"case5_withload.m\", \"case3_unbalanced.dss, \"case5_case3_unbal.json\" in the package folder under ./test/data) have been acquired, an Integrated Transmission-Distribution (ITD) AC Optimal Power Flow can be executed as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_opfitd(\"case5_withload.m\", \"case3_unbalanced.dss\", \"case5_case3_unbal.json\", pmitd_type, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)-with-Multiple-Distribution-Systems","page":"Getting Started","title":"Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The snippet shown below demonstrates how to run an OPFITD with multiple (different) distribution systems connected to different transmission system buses. In summary, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries must be defined in the boundary linking file. For the following snippet, assume we have access to ./test/data to get the respective files.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\n# Files\npm_file = \"case5_with2loads.m\"\npmd_file1 = \"case3_unbalanced.dss\"\npmd_file2 = \"case3_balanced.dss\"\nboundary_file = \"case5_case3x2_unbal_bal.json\"\n\npmd_files = [pmd_file1, pmd_file2] # create a vector of distribution system files.\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Parsing-files","page":"Getting Started","title":"Parsing files","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse the respective files into PowerModelsITD.jl, use the parse_files command","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"pmitd_data = parse_files(pm_file, pmd_file, boundary_file) # single distribution system file.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse for a model with multiple distribution system files, just pass the distribution system argument as a vector of files, as seen below.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"pmd_files = [pmd_file1, pmd_file2]\npmitd_data = parse_files(pm_file, pmd_files, boundary_file) # vector of multiple distribution system files.","category":"page"},{"location":"manual/quickguide.html#Getting-Results","page":"Getting Started","title":"Getting Results","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The solve_ commands in PowerModelsITD.jl return detailed results data in the form of a dictionary. This dictionary can be saved for further processing as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_opfitd(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note: the function solve_opfitd(...) does not neccessarily needs for the data to be parsed (i.e., parse_files(...)). The user can pass directly the files of the problem to the solve_opfitd(...) function, as seen previously.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Alternatively, you can use the function solve_model(...) and specify the build method, in this case build_opfitd:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_model(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer, build_opfitd)","category":"page"},{"location":"manual/quickguide.html#Running-Multinetwork-(mn)-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)-with-Multiple-Distribution-Systems-(ms)","page":"Getting Started","title":"Running Multinetwork (mn) Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems (ms)","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The snippet shown below demonstrates how to run a multinetwork (mn) OPFITD with multiple distribution systems (ms) connected to different transmission system buses. As seen previously, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries are defined in the boundary linking file. To run a multinetwork problem, time series values can be defined inside the opendss file(s) that represent the distribution system(s). Some important things to remember are:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The time series values can be defined in a .csv file that is called inside the opendss file(s).\nWhen the data is parsed, the transmission system will be automatically replicated to the number of time series values available in the opendss file(s).\nIf data in the transmission system need to be modified for different time steps, the data can be modified after the parsing process is done.\nRemember to run the special multinetwork function or build function (i.e., solve_mn_opfitd(...) or solve_model(..., build_mn_opfitd)).","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"For the following snippet, assume we have access to ./test/data to get the respective files.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\n# Files\npm_file = \"case5_with2loads.m\"\npmd_file = \"case3_unbalanced_withoutgen_mn.dss\"\nboundary_file = \"case5_case3x2.json\"\n\npmd_files = [pmd_file, pmd_file] # create a vector of distribution system files.\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_mn_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)\n","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Important Note: If you examine the file case3_unbalanced_withoutgen_mn.dss in detail, you will notice how time series power values are defined inside the opendss file as New Loadshape.ls1 pmult=(file=load_profile.csv), and then the load models are defined with parameters model=1 daily=ls1. This definition is sufficient for PowerModelsITD.jl to understand that this is a multinetwork problem. If you examine the content of the load_profile.csv file, you will notice that there are 4 time steps. This will cause the transmission, distribution, and boundary data to be replicated x4 (i.e., 4 times) while it is parsed to represent the overall problem.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note: The auto_rename=true option used in this example will be explained in later documentation.","category":"page"},{"location":"manual/quickguide.html#Accessing-Different-Formulations","page":"Getting Started","title":"Accessing Different Formulations","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported formulations is presented below.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"NLPowerModelITD{ACPPowerModel, ACPUPowerModel} indicates an AC to AC formulation in polar coordinates.\nNLPowerModelITD{ACRPowerModel, ACRUPowerModel} indicates an AC to AC formulation in rectangular coordinates.\nLPowerModelITD{NFAPowerModel, NFAUPowerModel} indicates a linear network active power flow to network active power flow formulation.\nIVRPowerModelITD{IVRPowerModel, IVRUPowerModel} indicates an AC current-voltage to AC current-voltage formulation.\nBFPowerModelITD{SOCBFPowerModel, SOCNLPUBFPowerModel} indicates an SOC branch-flow to SOC branch-flow formulation.\nNLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel} indicates an AC in rectangular coordinates to forward-backward sweep formulation.\nNLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel} indicates an AC in rectangular coordinates to first-order Taylor in rectangular coordinates formulation.\nNLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel} indicates an AC in polar coordinates to first-order Taylor in polar coordinates formulation.","category":"page"},{"location":"manual/quickguide.html#Examples","page":"Getting Started","title":"Examples","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsITD.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.","category":"page"},{"location":"reference/formulations.html#FormulationAPI","page":"Formulations","title":"Formulations","text":"","category":"section"},{"location":"reference/formulations.html#Abstract-Models","page":"Formulations","title":"Abstract Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractPowerModelITD\nAbstractNLPowerModelITD\nAbstractLPowerModelITD\nAbstractIVRPowerModelITD\nAbstractBFPowerModelITD\nAbstractLNLBFPowerModelITD","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.AbstractPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractPowerModelITD","text":"Root of the PowerModelsITD formulation hierarchy.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractNLPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractNLPowerModelITD","text":"Abstract Non-Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractLPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractLPowerModelITD","text":"Abstract Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractIVRPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractIVRPowerModelITD","text":"Abstract Current-Voltage (IVR) ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractBFPowerModelITD","text":"Abstract Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractLNLBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractLNLBFPowerModelITD","text":"Abstract Linear/Non-Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Power-ITD-Models","page":"Formulations","title":"Power ITD Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"PowerModelITD\nNLPowerModelITD\nLPowerModelITD\nIVRPowerModelITD\nBFPowerModelITD\nNLFOTPowerModelITD\nNLBFPowerModelITD\nLBFPowerModelITD\nWRBFPowerModelITD","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.PowerModelITD","page":"Formulations","title":"PowerModelsITD.PowerModelITD","text":"General PowerModelITD\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLPowerModelITD","text":"Non-Linear to Non-Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.LPowerModelITD","page":"Formulations","title":"PowerModelsITD.LPowerModelITD","text":"Linear to Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.IVRPowerModelITD","page":"Formulations","title":"PowerModelsITD.IVRPowerModelITD","text":"IVR to IVR ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.BFPowerModelITD","page":"Formulations","title":"PowerModelsITD.BFPowerModelITD","text":"Branch-flow to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLFOTPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLFOTPowerModelITD","text":"Non-Linear to First-Order Taylor (FOT) ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLBFPowerModelITD","text":"Non-Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.LBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.LBFPowerModelITD","text":"Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.WRBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.WRBFPowerModelITD","text":"WR to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Mutable-Stuct-creator","page":"Formulations","title":"Mutable Stuct creator","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"@pmitd_fields","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.@pmitd_fields","page":"Formulations","title":"PowerModelsITD.@pmitd_fields","text":"A macro for adding the base PowerModelsITD fields to a type definition.\n\n\n\n\n\n","category":"macro"},{"location":"developer/contributing.html#Contributing","page":"Contributing","title":"Contributing","text":"","category":"section"},{"location":"developer/contributing.html#Pull-Requests","page":"Contributing","title":"Pull Requests","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Every PR to PowerModelsITD should strive to meet the following guidelines.","category":"page"},{"location":"developer/contributing.html#PR-Title","page":"Contributing","title":"PR Title","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Should be concise and clear, describing in a phrase the content of the PR\nShould include a prefix that describes the primary type of the PR\nADD: feature addition\nFIX: bugfix\nREF: refactor\nUPD: updates to code for e.g. version bumps of dependencies\nSTY: style changes, no changes to function names, added features, etc.\nDOC: documentation-only additions/changes\nRM: dead code removal","category":"page"},{"location":"developer/contributing.html#PR-Body","page":"Contributing","title":"PR Body","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"If the change is breaking, it should be clearly stated up front\nThe purpose of this PR should be clearly stated right away\nMajor changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR\nAny associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged","category":"page"},{"location":"developer/contributing.html#PR-Code","page":"Contributing","title":"PR Code","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"An entry should be added to CHANGELOG.md for every PR\nDocumentation should be updated (See Documentation section above for guidelines)\nUnit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included\nCode should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)","category":"page"},{"location":"developer/contributing.html#Versions","page":"Contributing","title":"Versions","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"PowerModelsITD follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsITD reaches v1.0.0, we will adhere strictly to the SemVer convention.","category":"page"},{"location":"developer/contributing.html#Branch-Management","page":"Contributing","title":"Branch Management","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.","category":"page"},{"location":"reference/problems.html#ProblemAPI","page":"Problems","title":"Problems","text":"","category":"section"},{"location":"reference/problems.html#Solve-Problems","page":"Problems","title":"Solve Problems","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsITD.solve_dmld_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_dmld_opfitd","text":"function solve_dmld_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with minimum load delta (dmld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_dmld_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_dmld_opfitd","text":"function solve_dmld_opfitd(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with minimum load delta (dmld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_dmld_opfitd_simple-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_dmld_opfitd_simple","text":"function solve_mn_dmld_opfitd_simple(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_dmld_opfitd_simple-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_dmld_opfitd_simple","text":"function solve_mn_dmld_opfitd_simple(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd","text":"function solve_mn_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd","text":"function solve_mn_opfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_oltc-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_oltc","text":"function solve_mn_opfitd_oltc(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_oltc-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_oltc","text":"function solve_mn_opfitd_oltc(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_storage-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_storage","text":"function solve_mn_opfitd_storage(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_storage-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_storage","text":"function solve_mn_opfitd_storage(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_pfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_pfitd","text":"function solve_mn_pfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_pfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_pfitd","text":"function solve_mn_pfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{Dict{String}, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pmitd_data::Dict{String,<:Any},\n pmitd_type::Type, optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nInstantiates and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling object from power integrated transmission-distribution input data, pmitd_data. Here, pmitd_type is the integrated power transmission-distribution modeling type, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{String, String, String, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String,\n pmitd_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nParses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, power distribution, and boundry linking input files pm_file, pmd_file, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{String, Vector, String, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String,\n pmitd_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nParses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, multiple power distribution systems, and boundary linking input files pm_file, pmd_files vector of files, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork,solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd","text":"function solve_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd","text":"function solve_opfitd(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_oltc-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_oltc","text":"function solve_opfitd_oltc(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_oltc-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_oltc","text":"function solve_opfitd_oltc(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_storage-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_storage","text":"function solve_opfitd_storage(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_storage-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_storage","text":"function solve_opfitd_storage(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_pfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_pfitd","text":"function solve_pfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_pfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_pfitd","text":"function solve_pfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Builders","page":"Problems","title":"Builders","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_pfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_pfitd","text":"function build_mn_pfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_pfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_pfitd","text":"function build_mn_pfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_pfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_pfitd","text":"function build_mn_pfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_pfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_pfitd","text":"function build_mn_pfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow for Branch Flow (BF) Formulations.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Model-Instantiation","page":"Problems","title":"Model Instantiation","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"instantiate_model","category":"page"},{"location":"reference/problems.html#PowerModelsITD.instantiate_model","page":"Problems","title":"PowerModelsITD.instantiate_model","text":"function instantiate_model(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String,\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n auto_rename::Bool=false,\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_files vector, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\nfunction instantiate_model(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String,\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n auto_rename::Bool=false,\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_file (one file provided), and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\nfunction instantiate_model(\n pmitd_data::Dict{String,<:Any},\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from parsed power transmission and distribution (PMITD) input data pmitd_data. Here, pmitd_type is the integrated power transmission and distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions is an array of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\n","category":"function"},{"location":"manual/fileformat.html#File-Formats-Guide","page":"File Formats","title":"File Formats Guide","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"In this section, we will give a brief introduction to the file formats supported in PowerModelsITD.jl. Place special attention at the Boundary section to understand how the boundary linking file must be formatted and how the auto_rename=true option works.","category":"page"},{"location":"manual/fileformat.html#File-Formats-Supported","page":"File Formats","title":"File Formats Supported","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Transmission: Matpower \".m\" and PTI \".raw\" files (PSS(R)E v33 specification)\nDistribution: OpenDSS \".dss\" files\nBoundary: JSON \".json\" files","category":"page"},{"location":"manual/fileformat.html#Transmission-System","page":"File Formats","title":"Transmission System","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Matpower (\".m\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"function mpc = case5\nmpc.version = '2';\nmpc.baseMVA = 100.0;\n\n%% bus data\n%\tbus_i\ttype\tPd\tQd\tGs\tBs\tarea\tVm\tVa\tbaseKV\tzone\tVmax\tVmin\nmpc.bus = [\n\t1\t 2\t 0.0\t 0.0\t 0.0\t 0.0\t 1\t 1.07762\t 2.80377\t 230.0\t 1\t 1.10000\t 0.90000;\n\t2\t 1\t 300.0\t 98.61\t 0.0\t 0.0\t 1\t 1.08407\t -0.73465\t 230.0\t 1\t 1.10000\t 0.90000;\n\t3\t 2\t 300.0\t 98.61\t 0.0\t 0.0\t 1\t 1.10000\t -0.55972\t 230.0\t 1\t 1.10000\t 0.90000;\n\t4\t 3\t 390.0\t 131.47\t 0.0\t 0.0\t 1\t 1.06414\t 0.00000\t 230.0\t 1\t 1.10000\t 0.90000;\n\t5\t 1\t 8.0\t 1.2\t 0.0\t 0.0\t 1\t 1.00000\t 0.00000\t 230.0\t 1\t 1.10000\t 0.90000;\n\t10\t 2\t 0.0\t 0.0\t 0.0\t 0.0\t 1\t 1.06907\t 3.59033\t 230.0\t 1\t 1.10000\t 0.90000;\n];\n\n%% generator data\n%\tbus\tPg\tQg\tQmax\tQmin\tVg\tmBase\tstatus\tPmax\tPmin\nmpc.gen = [\n\t1\t 40.0\t 30.0\t 30.0\t -30.0\t 1.07762\t 100.0\t 1\t 40.0\t 0.0;\n\t1\t 170.0\t 127.5\t 127.5\t -127.5\t 1.07762\t 100.0\t 1\t 170.0\t 0.0;\n\t3\t 324.498\t 390.0\t 390.0\t -390.0\t 1.1\t 100.0\t 1\t 520.0\t 0.0;\n\t4\t 0.0\t -10.802\t 150.0\t -150.0\t 1.06414\t 100.0\t 1\t 200.0\t 0.0;\n\t10\t 470.694\t -165.039\t 450.0\t -450.0\t 1.06907\t 100.0\t 1\t 600.0\t 0.0;\n];\n\n%% generator cost data\n%\t2\tstartup\tshutdown\tn\tc(n-1)\t...\tc0\nmpc.gencost = [\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 14.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 15.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 30.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 40.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 10.000000\t 0.000000\t 2.000000;\n];\n\n%% branch data\n%\tfbus\ttbus\tr\tx\tb\trateA\trateB\trateC\tratio\tangle\tstatus\tangmin\tangmax\nmpc.branch = [\n\t1\t 2\t 0.00281\t 0.0281\t 0.00712\t 400.0\t 400.0\t 400.0\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t1\t 4\t 0.00304\t 0.0304\t 0.00658\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t1\t 10\t 0.00064\t 0.0064\t 0.03126\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t2\t 3\t 0.00108\t 0.0108\t 0.01852\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t3\t 4\t 0.00297\t 0.0297\t 0.00674\t 426\t 426\t 426\t 1.05\t 1.0\t 1\t -30.0\t 30.0;\n\t4\t 10\t 0.00297\t 0.0297\t 0.00674\t 240.0\t 240.0\t 240.0\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t2\t 5\t 0.00297\t 0.0297\t 0.00674\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n];\n","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"PSS(R)E v33 specification (\".raw\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":" 0, 100.00, 33, 0, 0, 60.00\ntests an angle shifting transformer\ntests two winding transformer status\n 1,'1', 230.0000,2, 1, 1, 1,1.00000000, 2.803770, 1.10000, 0.90000, 1.10000, 0.90000\n 2,'2', 230.0000,1, 1, 1, 1,1.08406997, -0.734650, 1.10000, 0.90000, 1.10000, 0.90000\n 3,'3', 230.0000,2, 1, 1, 1,1.00000000, -0.559720, 1.10000, 0.90000, 1.10000, 0.90000\n 4,'4', 230.0000,3, 1, 1, 1,1.06413996, 0.000000, 1.10000, 0.90000, 1.10000, 0.90000\n 5,'5', 230.0000,1, 1, 1, 1,1.00000000, 0.000000, 1.10000, 0.90000, 1.10000, 0.90000\n 10,'10', 230.0000,2, 1, 1, 1,1.00000000, 3.590330, 1.10000, 0.90000, 1.10000, 0.90000\n0 / END OF BUS DATA, BEGIN LOAD DATA\n 2,'1',1, 1, 1, 300.000, 98.610, 0.000, 0.000, 0.000, 0.000, 1,1\n 3,'1',1, 1, 1, 300.000, 98.610, 0.000, 0.000, 0.000, 0.000, 1,1\n 4,'1',1, 1, 1, 390.000, 131.470, 0.000, 0.000, 0.000, 0.000, 1,1\n 5,'1',1, 1, 1, 8.00000, 1.20000, 0.000, 0.000, 0.000, 0.000, 1,1\n0 / END OF LOAD DATA, BEGIN FIXED SHUNT DATA\n0 / END OF FIXED SHUNT DATA, BEGIN GENERATOR DATA\n 1,'1', 40.000, 30.000, 30.000, -30.000,1.07762, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 40.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 1,'2', 170.000, 127.500, 127.500, -127.500,1.07762, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 170.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 3,'1', 324.498, 390.000, 390.000, -390.000,1.10000, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 520.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 4,'1', 0.000, -10.802, 150.000, -150.000,1.06414, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 200.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 10,'1', 470.694, -165.039, 450.000, -450.000,1.06907, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 600.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n0 / END OF GENERATOR DATA, BEGIN BRANCH DATA\n 1, 2,'1',2.81000E-3,2.81000E-2,7.12000E-3, 400.00, 400.00, 400.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 1, 4,'1',3.04000E-3,3.04000E-2,6.58000E-3, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 1, 10,'1',6.40000E-4,6.40000E-3,3.12600E-2, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 2, 3,'1',1.08000E-3,1.08000E-2,1.85200E-2, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 3, 4,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00, 1.05000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 4, 10,'1',2.97000E-3,2.97000E-2,6.74000E-3, 240.00, 240.00, 240.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 2, 5,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n0 / END OF BRANCH DATA, BEGIN TRANSFORMER DATA\n 4, 3, 0,'1 ',0,1,1,0.00000E0,6.74000E-3,2,' ',1, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, -1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,0,1,0.00000E0,6.74000E-3,2,' ',1, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,1,0,0.00000E0,6.74000E-3,2,' ',0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,1,1,0.00000E0,6.74000E-3,2,' ',2, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n0 / END OF TRANSFORMER DATA, BEGIN AREA DATA\n 1, 0, 0.000, 1.000,'1 '\n0 / END OF AREA DATA, BEGIN TWO-TERMINAL DC DATA\n0 / END OF TWO-TERMINAL DC DATA, BEGIN VOLTAGE SOURCE CONVERTER DATA\n0 / END OF VOLTAGE SOURCE CONVERTER DATA, BEGIN IMPEDANCE CORRECTION DATA\n0 / END OF IMPEDANCE CORRECTION DATA, BEGIN MULTI-TERMINAL DC DATA\n0 / END OF MULTI-TERMINAL DC DATA, BEGIN MULTI-SECTION LINE DATA\n0 / END OF MULTI-SECTION LINE DATA, BEGIN ZONE DATA\n 1,'1 '\n0 / END OF ZONE DATA, BEGIN INTER-AREA TRANSFER DATA\n0 / END OF INTER-AREA TRANSFER DATA, BEGIN OWNER DATA\n 1,'1'\n0 / END OF OWNER DATA, BEGIN FACTS CONTROL DEVICE DATA\n0 / END OF FACTS CONTROL DEVICE DATA, BEGIN SWITCHED SHUNT DATA\n0 /END OF SWITCHED SHUNT DATA, BEGIN GNE DEVICE DATA\n0 /END OF GNE DEVICE DATA\nQ","category":"page"},{"location":"manual/fileformat.html#Distribution-System","page":"File Formats","title":"Distribution System","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"OpenDSS (\".dss\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"New Circuit.3bus_bal\n! define a really stiff source\n~ basekv=230 pu=1.00 MVAsc3=200000 MVAsc1=210000\n\n! Substation Transformer\nNew Transformer.SubXF Phases=3 Windings=2 Xhl=0.01\n~ wdg=1 bus=sourcebus conn=wye kv=230 kva=25000 %r=0.0005\n~ wdg=2 bus=Substation conn=wye kv=13.8 kva=25000 %r=0.0005\n\n!Define Linecodes\nNew linecode.556MCM nphases=3 basefreq=60 ! ohms per 5 mile\n~ rmatrix = ( 0.1000 | 0.0400 0.1000 | 0.0400 0.0400 0.1000)\n~ xmatrix = ( 0.0583 | 0.0233 0.0583 | 0.0233 0.0233 0.0583)\n~ cmatrix = (50.92958178940651 | -0 50.92958178940651 | -0 -0 50.92958178940651 ) ! small capacitance\n\nNew linecode.4/0QUAD nphases=3 basefreq=60 ! ohms per 100ft\n~ rmatrix = ( 0.1167 | 0.0467 0.1167 | 0.0467 0.0467 0.1167)\n~ xmatrix = (0.0667 | 0.0267 0.0667 | 0.0267 0.0267 0.0667 )\n~ cmatrix = (50.92958178940651 | -0 50.92958178940651 | -0 -0 50.92958178940651 ) ! small capacitance\n\n!Define lines\nNew Line.OHLine bus1=Substation.1.2.3 Primary.1.2.3 linecode = 556MCM length=1 normamps=6000 emergamps=6000! 5 mile line\nNew Line.Quad Bus1=Primary.1.2.3 loadbus.1.2.3 linecode = 4/0QUAD length=1 normamps=6000 emergamps=6000 ! 100 ft\n\n!Loads - single phase\nNew Load.L1 phases=1 loadbus.1.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\nNew Load.L2 phases=1 loadbus.2.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\nNew Load.L3 phases=1 loadbus.3.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\n\n!GENERATORS DEFINITIONS\nNew generator.gen1 Bus1=loadbus.1.2.3 Phases=3 kV=( 13.8 3 sqrt / ) kW=2000 pf=1 conn=wye Model=3\n\nSet VoltageBases = \"230,13.8\"\nSet tolerance=0.000001\nset defaultbasefreq=60","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: See how the defined file has a unique circuit (ckt) name (i.e., New Circuit.3bus_bal). It is important that for scenarios where multiple distribution systems are to be used, each distribution system file must have a unique ckt name. Otherwise, PowerModelsITD.jl will generate an error indicating the user that they must input distribution systems with unique names (or use the auto_rename=true option explained later).","category":"page"},{"location":"manual/fileformat.html#Boundary","page":"File Formats","title":"Boundary","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The file shown below shows the ideal format to be used when defining the boundary connections in the JSON file. For transmission system boundary buses, the name of the bus is sufficient. For distribution systems, especially, cases where multiple distribution systems will be inputted, the ideal format for distribution_boundary names is circuit_name.object.name_of_object. In this example, two distribution systems (3bus_unbal and 3bus_bal) are going to be connected to buses 5 and 6 in the transmission system.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"JSON (\".json\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"[\n\t{\n \"transmission_boundary\": \"5\",\n \"distribution_boundary\": \"3bus_unbal.voltage_source.source\"\n\t},\n\n\t{\n \"transmission_boundary\": \"6\",\n \"distribution_boundary\": \"3bus_bal.voltage_source.source\"\n }\n]","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"As observed in the file, we follow the ideal format when defining the distribution_boundary names. If this format is not followed (and the auto_rename=true option is not used), errors will be displayed by PowerModelsITD.jl. Errors ranging from \"The distribution bus/source specified in the JSON file does not exists. Please input an existing bus/source!\" to \"Distribution systems have same circuit names! Please use different names for each distribution system. (e.g., New Circuit.NameOfCkt) or use the auto_rename=true option.\" will be displayed warning the user that something is wrong with the JSON file information provided.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"But, what happens when we would like to use the same distribution system file to create multiple dsitribution systems connected at different transmission system boundary buses. In other words, we don't care too much about the names of the distribution circuits, and the boundary names in the JSON file are inputted in a sequential order. Then, for use with caution, PowerModelsITD.jl supports the use of an auto-renaming option that renames repeated circuits in a sequential manner such as: pmd_files = [pmd, pmd, ..., pmd], pmd_cktName_1, pmd_cktName_2, ..., pmd_cktName_n.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: All elements/components inside the pmd=> dictionary will always be renamed based on the format ckt_name.component_name","category":"page"},{"location":"manual/fileformat.html#The-auto_renametrue-Option","page":"File Formats","title":"The auto_rename=true Option","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: Use this option with extreme caution! When this option is used, a @warn will be displayed such that the user is aware that the boundary connections may be wrong because they are assigned/connected in a sequential manner and not based on buses names.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Let's go through an example case where we would like to use the same distribution system file to create a test case where multiple distribution systems (with the same name) are connected to different transmission system boundary buses. And, we don't care about the specific boundary connections since they can be done sequentially (since all or some distribution systems will be a copy of the same circuit and will have the same names).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Let's first define the test case in Julia:","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = joinpath(dirname(trans_path), \"case5_with2loads.m\")\npmd_file = joinpath(dirname(dist_path), \"case3_unbalanced_withoutgen.dss\")\npmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies\npmitd_file = joinpath(dirname(bound_path), \"case5_case3x2.json\")\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\n\nresult = solve_opfitd(pm_file, pmd_files, pmitd_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Another way to define and solve the problem could be (both ways are equivalent):","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = joinpath(dirname(trans_path), \"case5_with2loads.m\")\npmd_file = joinpath(dirname(dist_path), \"case3_unbalanced_withoutgen.dss\")\npmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies\npmitd_file = joinpath(dirname(bound_path), \"case5_case3x2.json\")\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\n\npmitd_data = parse_files(pm_file, pmd_files, pmitd_file; auto_rename=true)\nresult = solve_model(pmitd_data, pmitd_type, Ipopt.Optimizer, build_opfitd)","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Note, how the option auto_rename=true is defined such that PowerModelsITD.jl can understand that we don't care about the specific names of the circuits (because we are repeating ckts) so we are allowing the application to auto-rename the ckts as needed for its correct operation. If the auto_rename option is not defined, errors will be displayed.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The JSON file for this example is defined as:","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"[\n\t{\n \"transmission_boundary\": \"5\",\n \"distribution_boundary\": \"voltage_source.source\"\n\t},\n\n\t{\n \"transmission_boundary\": \"6\",\n \"distribution_boundary\": \"voltage_source.source\"\n }\n]","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"See how we do not need to especifically define the circuit names, but we still need to define the object.name_of_object. Internally, PowerModelsITD.jl will parse the files and assign the names: 3bus_unbal_nogen_1 and 3bus_unbal_nogen_2 as the names of the circuits (based on the ckt_name_n standard format).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: In the case where multiple distribuition systems are defined, let's say 3 or more, and only two have the same circuit name, if auto_rename=false (i.e., not used) errors will be displayed, if auto_rename=true only the repeated circuits will be renamed (in this case, all repeated circuits after the first one).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The auto rename option can be very useful for some cases, but users must be very careful when using it since specific boundary connections are going to be performed in a sequential manner and PowerModelsITD.jl cannot guarantee that this is what the user is expecting. To avoid confusions, we recommend users stick to the ideal boundary linking file JSON format.","category":"page"},{"location":"index.html#![PowerModelsITD-Logo](assets/logo.svg)","page":"Introduction","title":"(Image: PowerModelsITD Logo)","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsITD","category":"page"},{"location":"index.html#What-is-PowerModelsITD.jl?","page":"Introduction","title":"What is PowerModelsITD.jl?","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsITD.jl is a Julia/JuMP-based package for modeling and optimizing integrated transmission-distribution (ITD) power networks.","category":"page"},{"location":"index.html#Resources-for-Getting-Started","page":"Introduction","title":"Resources for Getting Started","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Installation Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Quickstart Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the File Formats Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the introductory tutorial Introduction to PowerModelsITD.jl.","category":"page"},{"location":"index.html#How-the-documentation-is-structured","page":"Introduction","title":"How the documentation is structured","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The following is a high-level overview of how our documentation is structured. There are three primary sections:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The Manual contains detailed documentation for certain aspects of PowerModelsITD.jl, such as the Data Models, the Network Formulations, or the Optimization Problem Specifications.\nTutorials contains working examples of how to use PowerModelsITD.jl. Start here if you are new to PowerModelsITD.jl.\nThe API Reference contains a complete list of the functions you can use in PowerModelsITD.jl. Look here if you want to know how to use a particular function.","category":"page"},{"location":"index.html#Citing-PowerModelsITD.jl","page":"Introduction","title":"Citing PowerModelsITD.jl","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"If you find PowerModelsITD useful for your work, we kindly request that you cite the following publication:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"@article{ospina2024modeling,\n author={Ospina, Juan and Fobes, David M. and Bent, Russell and Wächter, Andreas},\n journal={IEEE Transactions on Power Systems},\n title={Modeling and Rapid Prototyping of Integrated Transmission-Distribution OPF Formulations With PowerModelsITD.jl},\n year={2024},\n volume={39},\n number={1},\n pages={172-185},\n keywords={Optimization;Reactive power;Voltage;Upper bound;Distribution networks;Steady-state;Transportation;AC optimal power flow;Julia language;nonlinear optimization;open-source},\n doi={10.1109/TPWRS.2023.3234725}}","category":"page"},{"location":"index.html#Acknowledgments","page":"Introduction","title":"Acknowledgments","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code has been developed with the support of the Grant: \"Optimized Resilience for Distribution and Transmission Systems\" funded by the U.S. Department of Energy (DOE) Office of Electricity (OE) Advanced Grid Modeling (AGM) Research Program under program manager Ali Ghassemian. The research work conducted at Los Alamos National Laboratory is done under the auspices of the National Nuclear Security Administration of the U.S. Department of Energy under Contract No. 89233218CNA000001. The primary developers are Juan Ospina (@juanjospina) and David Fobes (@pseudocubic).","category":"page"},{"location":"index.html#License","page":"Introduction","title":"License","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.","category":"page"},{"location":"reference/internal.html#Internal-Functions","page":"Internal Functions","title":"Internal Functions","text":"","category":"section"},{"location":"reference/internal.html","page":"Internal Functions","title":"Internal Functions","text":"Modules = [PowerModelsITD]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsITD._add_file_name!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._add_file_name!","text":"function _add_file_name!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any}\n)\n\nAdds filename from data to \"files\" dictionary in pmd (base_data).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._assign_boundary_buses!-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsITD._assign_boundary_buses!","text":"function _assign_boundary_buses!(\n data::Dict{String,<:Any},\n conn;\n multinetwork::Bool=false,\n nw::String=\"0\"\n)\n\nHelper function for assigning boundary buses. data is the pmitd dictionary containing the boundary information, conn is the boundary connection information, multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned, and nw is the network number.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._check_and_rename_circuits!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._check_and_rename_circuits!","text":"function _check_and_rename_circuits!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any};\n auto_rename::Bool=false,\n ms_num::Int=1\n)\n\nChecks if the name of the data ckt already exists, if so and auto_rename=false an error should be displayed telling the user that they must use the different ckt names when parsing multiple distribution systems. If auto_rename=true, PMITD will rename the repeated ckt name to repeatedCktName_(ms_num). Finally, adds the ckt name of data to \"cktnames\" in the `basedata` dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._check_cost_models-Tuple{PowerModels.AbstractPowerModel}","page":"Internal Functions","title":"PowerModelsITD._check_cost_models","text":"function _check_cost_models(\n pm::_PM.AbstractPowerModel\n)\n\nChecks that all cost models are of the same type. Adapted from the implementation in PowerModels <= v0.19.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._check_dcline_cost_models-Tuple{PowerModels.AbstractPowerModel}","page":"Internal Functions","title":"PowerModelsITD._check_dcline_cost_models","text":"function _check_dcline_cost_models(\n pm::_PM.AbstractPowerModel\n)\n\nChecks that all dcline cost models are of the same type. Adapted from the implementation in PowerModels <= v0.19.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._check_gen_cost_models-Tuple{PowerModels.AbstractPowerModel}","page":"Internal Functions","title":"PowerModelsITD._check_gen_cost_models","text":"function _check_gen_cost_models(\n pm::_PM.AbstractPowerModel\n)\n\nChecks that all generator cost models are of the same type. Adapted from the implementation in PowerModels <= v0.19.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._clean_pmd_base_data!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._clean_pmd_base_data!","text":"function _clean_pmd_base_data!(\n base_data::Dict{String,<:Any}\n)\n\nRemoves/Cleans components from base_data pmd dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_boundary_active_power_start_values_distribution-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._compute_boundary_active_power_start_values_distribution","text":"function _compute_boundary_active_power_start_values_distribution(\n nw_ref::Dict{Symbol,<:Any}\n)\n\nComputes the starting values for pbound_to variables. Returns dictionary with summation of the activate power loads. Returns dictionary with the summation of the active power loads for each dist. system.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_boundary_reactive_power_start_values_distribution-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._compute_boundary_reactive_power_start_values_distribution","text":"function _compute_boundary_reactive_power_start_values_distribution(\n nw_ref::Dict{Symbol,<:Any}\n)\n\nComputes the starting values for qbound_to and adds them to ref. Returns dictionary with the summation of the reactive power loads for each dist. system.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_default_strg_cost_distribution-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._compute_default_strg_cost_distribution","text":"function _compute_default_strg_cost_distribution(\n strg_data::Dict{String,<:Any}\n)\n\nComputes a default cost for the energy storage (distribution). Returns the default storage cost to be added to the data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_default_strg_cost_transmission-Tuple{Dict{String}, Float64}","page":"Internal Functions","title":"PowerModelsITD._compute_default_strg_cost_transmission","text":"function _compute_default_strg_cost_transmission(\n strg_data::Dict{String,<:Any},\n baseMVA::Float64\n)\n\nComputes a default cost for the energy storage (transmission). Returns the default storage cost to be added to the data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._convert_to_pmitd_structure-Tuple{Vector{Any}}","page":"Internal Functions","title":"PowerModelsITD._convert_to_pmitd_structure","text":"function _convert_to_pmitd_structure(\n data::Vector{Any}\n)\n\nConverts json data parsed into the required pmitd structure. Returns the new data structure with necessary information and compatible names.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._correct_boundary_names!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._correct_boundary_names!","text":"function _correct_boundary_names!(\n pmitd_data::Dict{String,<:Any}\n)\n\nCorrects the names of distribution system boundary buses given in boundary linking file based on the cktnames stored in the \"pmd\"=>\"cktnames\". The correction is done sequentially, so each distribution boundary bus name will be assigned the specific ckt name that exists in the numerical position of the vector \"cktnames\". This process should only be applied when users explicitly use the option `autorename=true, and awarning` is displayed warning the user that the boundaries may not be correct.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._get_powermodel_from_powermodelitd-Tuple{AbstractPowerModelITD}","page":"Internal Functions","title":"PowerModelsITD._get_powermodel_from_powermodelitd","text":"function _get_powermodel_from_powermodelitd(\n pm::AbstractPowerModelITD\n)\n\nGets the PM model from the PMITD model structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._get_powermodeldistribution_from_powermodelitd-Tuple{AbstractPowerModelITD}","page":"Internal Functions","title":"PowerModelsITD._get_powermodeldistribution_from_powermodelitd","text":"function _get_powermodeldistribution_from_powermodelitd(\n pmd::AbstractPowerModelITD\n)\n\nGets the PMD model from the PMITD model structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad","text":"function _objective_itd_min_fuel_cost_polynomial_linquad(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic (IVR formulation).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad","text":"function _objective_itd_min_fuel_cost_polynomial_linquad(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage","text":"function _objective_itd_min_fuel_cost_polynomial_linquad_storage(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic (IVR formulation) with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage","text":"function _objective_itd_min_fuel_cost_polynomial_linquad_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl","text":"function _objective_itd_min_fuel_cost_polynomial_nl(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear (IVR formulation).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl","text":"function _objective_itd_min_fuel_cost_polynomial_nl(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage","text":"function _objective_itd_min_fuel_cost_polynomial_nl_storage(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear (IVR formulation) with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage","text":"function _objective_itd_min_fuel_cost_polynomial_nl_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta","text":"function _objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic for transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple","text":"function _objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic for transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta","text":"function _objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear for transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple","text":"function _objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear for transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_variable_dc_cost","page":"Internal Functions","title":"PowerModelsITD._objective_variable_dc_cost","text":"function _objective_variable_dc_cost(\n pm::_PM.AbstractPowerModel,\n report::Bool=true\n)\n\nAdds pdccost variables and constraints. Adapted from the implementation in PowerModels <= v0.19.\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsITD._objective_variable_dc_cost-2","page":"Internal Functions","title":"PowerModelsITD._objective_variable_dc_cost","text":"function _objective_variable_dc_cost(\n pm::_PM.AbstractIVRModel,\n report::Bool=true\n)\n\nAdds pdccost variables and constraints for IVR Model. Added for compat with PowerModels <= v0.19 implementation.\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsITD._objective_variable_pg_cost","page":"Internal Functions","title":"PowerModelsITD._objective_variable_pg_cost","text":"function _objective_variable_pg_cost(\n pm::_PM.AbstractPowerModel,\n report::Bool=true\n)\n\nAdds pg_cost variables and constraints. Adapted from the implementation in PowerModels <= v0.19.\n\n\n\n\n\n","category":"function"},{"location":"reference/internal.html#PowerModelsITD._objective_variable_pg_cost-Tuple{PowerModels.AbstractIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_variable_pg_cost","text":"function _objective_variable_pg_cost(\n pm::_PM.AbstractIVRModel,\n report::Bool=true\n)\n\nAdds pg_cost variables and constraints for IVR Model. Adapted from the implementation in PowerModels <= v0.19.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_connect_transmission_distribution!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_connect_transmission_distribution!","text":"function _ref_connect_transmission_distribution!(\n ref::Dict{Symbol,<:Any}\n)\n\nCreates the boundary refs that integrate/connect the transmission and distribution system bus(es).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_filter_distribution_slack_generators!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_filter_distribution_slack_generators!","text":"function _ref_filter_distribution_slack_generators!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves/filters-out the slack generators at buses/nodes where the transmission system is going to be integrated/connected.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_filter_transmission_integration_loads!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_filter_transmission_integration_loads!","text":"function _ref_filter_transmission_integration_loads!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves/filters-out the loads at buses (i.e., boundary buses) where distribution systems are going to be integrated/connected.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_remove_refbus_distribution!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_remove_refbus_distribution!","text":"function _ref_remove_refbus_distribution!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves the reference(slack) bus in the distribution system(s).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._remove_network_components!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._remove_network_components!","text":"function _remove_network_components!(\n base_data::Dict{String,<:Any}\n)\n\nRemoves components from base_data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._rename_components!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._rename_components!","text":"function _rename_components!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any}\n)\n\nRenames the components given in data for new multi-system and adds the renamed components to base_data dictionary structure. cktname.element\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._rename_network_components!-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsITD._rename_network_components!","text":"function _rename_network_components!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any},\n ckt_name::String\n)\n\nRename specific components in single network dictionary. base_data is the dictionary where the renamed components are to be added, data is the dictionary containing the components to be renamed. ckt_name is the circuit name of data.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._scale_loads!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsITD._scale_loads!","text":"function _scale_loads!(\n p_data::Dict{String,<:Any},\n scalar::Real\n)\n\nScales loads based on the scalar passed as second argument. p_data is the dictionary that contains the loads to be scaled. scalar is the float value used to scale all the loads in the p_data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_pmitd_solution_to_si!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_pmitd_solution_to_si!","text":"function _transform_pmitd_solution_to_si!(\n result::Dict{String,<:Any}\n)\n\nTransforms the PMITD solution from per-unit (pu) to SI units.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_solution_to_pu!-Tuple{Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_solution_to_pu!","text":"function _transform_solution_to_pu!(\n result,\n pmitd_data::Dict{String,<:Any};\n make_si::Bool=false,\n multinetwork::Bool=false,\n solution_model::String=\"eng\"\n)\n\nTransforms the PM and PMD solutions from SI units to per-unit (pu), and the PMD solution from MATH back to ENG model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_solution_to_si!-Tuple{Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_solution_to_si!","text":"function _transform_solution_to_si!(\n result,\n pmitd_data::Dict{String,<:Any};\n make_si::Bool=true,\n multinetwork::Bool=false,\n solution_model::String=\"eng\"\n)\n\nTransforms the PM and PMD solutions from per-unit (pu) to SI units, and the PMD solution from MATH back to ENG model.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_current-Tuple{AbstractIVRPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_current","text":"function constraint_boundary_current(\n pmitd::AbstractIVRPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints based on rectangular currents (I) for AbstractIVRPowerModelITD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_power-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_power","text":"function constraint_boundary_power(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints for AbstractPowerModelITD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_power-Tuple{LPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_power","text":"function constraint_boundary_power(\n pmitd::LPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints for LPowerModelITD (Linear versions - Active P only).\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACPPowerModel, ACPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.ACPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACP-ACPU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACPPowerModel, FOTPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.FOTPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACP-FOTPU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, ACRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.ACRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACR-ACRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FBSUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FBSU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FOTRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FOTRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nGeneral voltage angle boundary constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{DCPPowerModel, DCPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.DCPPowerModel,\n pmd::_PMD.DCPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nDCP-DCPU boundary bus voltage angle constraints: DCP angle.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{IVRPowerModel, IVRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.IVRPowerModel,\n pmd::_PMD.IVRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nIVR-IVRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{NFAPowerModel, NFAUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.NFAPowerModel,\n pmd::_PMD.NFAUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nNFA-NFAU boundary bus voltage angle constraints: empty NFA angle.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractBFAModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractBFAModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nBFA-LinDist3FlowPowerModel boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSDPWRMModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSDPWRMModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSDPWRM-SOCConicUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBFConic-SOCUBFConic boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nSOCBF-LinDist3FlowPowerModel boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFModel, SOCNLPUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.SOCNLPUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBF-SOCNLUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCWRConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCWRConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCWRConic-SOCConicUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACPPowerModel, ACPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.ACPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACP-ACPU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACPPowerModel, FOTPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.FOTPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACP-FOTPU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, ACRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.ACRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACR-ACRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FBSUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FBSU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FOTRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FOTRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nGeneral voltage magnitude boundary constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{DCPPowerModel, DCPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.DCPPowerModel,\n pmd::_PMD.DCPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nDCP-DCPU boundary bus voltage magnitude constraints: empty since DC keeps vm = 1 for all.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{IVRPowerModel, IVRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.IVRPowerModel,\n pmd::_PMD.IVRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nIVR-IVRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{NFAPowerModel, NFAUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.NFAPowerModel,\n pmd::_PMD.NFAUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nNFA-NFAU boundary bus voltage magnitude constraints: empty NFA.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractBFAModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractBFAModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nBFA-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSDPWRMModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSDPWRMModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSDPWRM-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBFConic-SOCUBFConic boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nSOCBF-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFModel, SOCNLPUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.SOCNLPUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBF-SOCNLUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCWRConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCWRConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCWRConic-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_current_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_current_balance","text":"function constraint_distribution_current_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedIVRModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nIVRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_current_balance_boundary-Tuple{AbstractIVRPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_current_balance_boundary","text":"function constraint_distribution_current_balance_boundary(\n pmitd::AbstractIVRPowerModelITD,\n i::Int;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral current balance contraints for boundary buses in the distribution system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractBFPowerModelITD, LPUBFDiagPowerModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractBFPowerModelITD,\n pmd::_PMD.LPUBFDiagPowerModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nLinDist3FlowPowerModel distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FBSUBFPowerModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FBSUBFPowerModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFBSU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FOTPUPowerModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FOTPUPowerModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFOTPU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FOTRUPowerModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FOTRUPowerModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFOTRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedACPModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedACPModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nACPU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedACRModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedACRModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nACRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedActivePowerModel, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedActivePowerModel,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nDCPU/NFAU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedWModels, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedWModels,\n n::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nUnbalanced W models distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance_boundary-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance_boundary","text":"function constraint_distribution_power_balance_boundary(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral power balance contraints for boundary buses in the distribution system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_current_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractIVRModel, Int64, Int64, Vararg{Any, 8}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_current_balance","text":"function constraint_transmission_current_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractIVRModel,\n n::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_gens,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nIVR transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_current_balance_boundary-Tuple{AbstractIVRPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_current_balance_boundary","text":"function constraint_transmission_current_balance_boundary(\n pmitd::AbstractIVRPowerModelITD,\n i::Int;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral current balance contraints for boundary buses in the transmission system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractACPModel, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractACPModel,\n n::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nACP transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractACRModel, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractACRModel,\n n::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nACR transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractActivePowerModel, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractActivePowerModel,\n n::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nDCP/NFA transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, Union{PowerModels.AbstractACTModel, PowerModels.AbstractBFModel, PowerModels.AbstractWRConicModel, PowerModels.AbstractWRMModel, PowerModels.AbstractWRModel}, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractWModels,\n n::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nW Models (e.g., SOCBF) transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance_boundary-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance_boundary","text":"function constraint_transmission_power_balance_boundary(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral power balance contraints for boundary buses in the transmission system-side.\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.9.2/siteinfo.js b/v0.9.2/siteinfo.js new file mode 100644 index 0000000..8e06722 --- /dev/null +++ b/v0.9.2/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.9.2"; diff --git a/v0.9.2/tutorials/BeginnersGuide.html b/v0.9.2/tutorials/BeginnersGuide.html new file mode 100644 index 0000000..31dab2d --- /dev/null +++ b/v0.9.2/tutorials/BeginnersGuide.html @@ -0,0 +1,131 @@ + +Beginners Guide · PowerModelsITD.jl

Introduction to PowerModelsITD

In this guide, we will go through a beginner guide that demonstrates the current capabilities of PowerModelsITD. This guide will showcase a non-comprehensive list of things you can do with PowerModelsITD.

Each example case shown in this guide will be divided into three main parts.

  • (1) Brief explanation of the test case and what we want to do/obtain.
  • (2) The Julia code needed to perform the specific case study (users can copy and paste this code directly).
  • (3) The console output obtained when the code is executed.

Important: All files used in this beginner guide are available in the /test/data folder of the repository.

Example Case #1: Solving a simple Integrated T&D Optimal Power Flow (OPFITD)

Test Case #1

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Julia Code for Test Case #1

using PowerModelsITD
+using Ipopt
+
+silence!()  # Silences the console, so warning messages or information are not displayed
+
+files_path = joinpath(dirname(pathof(PowerModelsITD)), "..")                    # file path for test cases files
+pm_file = joinpath(files_path, "test/data/transmission/case5_withload.m")       # transmission system file
+pmd_file = joinpath(files_path, "test/data/distribution/case3_unbalanced.dss")  # distribution system file
+boundary_file = joinpath(files_path, "test/data/json/case5_case3_unbal.json")   # boundary file with info. about boundary buses
+formulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}                    # type of formulation to be used
+data = parse_files(pm_file, pmd_file, boundary_file)                        # parse files into dictionary
+result = solve_opfitd(data, formulation, Ipopt.Optimizer)                   # solve the opfitd
+
+# Check the result
+@info "Objective: $(result["objective"]) [\$/hr]"
+@info "Termination Status of Solver: $(result["termination_status"])"
+@info "Solve Time: $(result["solve_time"]) [seconds]"
+@info "Solution Values for Transmission system: $(result["solution"]["it"]["pm"])"
+@info "Solution Values for Distribution system(s): $(result["solution"]["it"]["pmd"])"
+@info "Solution Values for Boundary(ies): $(result["solution"]["it"]["pmitd"])"

Console Output for Test Case #1

After running the corresponding code, the user should get the following output displayed on the console.

[ Main | Info ] : Objective: 17953.746512039743 [$/hr]
+[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED
+[ Main | Info ] : Solve Time: 0.05849599838256836 [seconds]
+
+[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}("baseMVA" => 100.0, "branch" => Dict{String, Any}("4" => Dict{String, Any}("qf" => -215.4572384567855, "qt" => 220.01471251650577, "pt" => 72.72770254777281, "pf" => -72.10324334974787), "1" => Dict{String, Any}("qf" => -91.9457671031378, "qt" => 113.04924896169344, "pt" => -235.96795359006418, "pf" => 238.13985616928193), "5" => Dict{String, Any}("qf" => 71.37529049674947, "qt" => -69.00868855761938, "pt" => 57.04309684079022, "pf" => -56.75055132454856), "2" => Dict{String, Any}("qf" => 40.82747127060588, "qt" => -27.51897757380047, "pt" => -190.17342809935752, "pf" => 191.55864094141782), "6" => Dict{String, Any}("qf" => 19.289482716290323, "qt" => 1.0554040857229503, "pt" => 239.9976806084548, "pf" => -237.90830207159405), "7" => Dict{String, Any}("qf" => 3.7979894950920543, "qt" => -4.367184067738672, "pt" => -8.068452673591816, "pf" => 8.071196939812054), "3" => Dict{String, Any}("qf" => 208.61829769507162, "qt" => -204.19918131371665, "pt" => 220.40004611863847, "pf" => -219.6984944935753)), "gen" => Dict{String, Any}("4" => Dict{String, Any}("qg" => 54.23181658487047, "pg" => 18.96136666983862), "1" => Dict{String, Any}("qg" => 30.00000079376986, "pg" => 40.00000096678977), "5" => Dict{String, Any}("qg" => -203.1437772279937, "pg" => 460.3977267270933), "2" => Dict{String, Any}("qg" => 127.50000106876985, "pg" => 170.00000165033464), "3" => Dict{String, Any}("qg" => 390.00000301325525, "pg" => 315.97715122322427)), "multinetwork" => false, "bus" => Dict{String, Any}("4" => Dict{String, Any}("va" => -9.820934169803595e-29, "vm" => 0.8999999900918129), "1" => Dict{String, Any}("va" => 3.9557118095964663, "vm" => 0.9178154479809132), "5" => Dict{String, Any}("va" => -0.8036120919989638, "vm" => 0.9400883479210898), "2" => Dict{String, Any}("va" => -0.6563318572164789, "vm" => 0.9416319858451535), "10" => Dict{String, Any}("va" => 5.018509000535593, "vm" => 0.904864159526407), "3" => Dict{String, Any}("va" => -0.3122279603896953, "vm" => 0.9670939985734723)), "per_unit" => false)
+
+[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("line" => Dict{String, Any}("3bus_unbal.quad" => Dict{String, Any}("qf" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], "qt" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], "pt" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], "pf" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), "3bus_unbal.ohline" => Dict{String, Any}("qf" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], "qt" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], "pt" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], "pf" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal.subxf" => Dict{String, Any}("q" => [[1354.7952022418647, 1507.3400640138161, 1504.5761375753734], [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072]], "p" => [[3367.1286152278885, 2346.3702946258413, 2354.835193007617], [-3367.110727286094, -2346.3597337552624, -2354.8245890269895]])), "generator" => Dict{String, Any}("3bus_unbal.gen1" => Dict{String, Any}("qg_bus" => [-0.0, -0.0, -0.0], "qg" => [-0.0, -0.0, -0.0], "pg" => [666.6676628468832, 666.6676628064197, 666.6676628099706], "pg_bus" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), "load" => Dict{String, Any}("3bus_unbal.l2" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "3bus_unbal.l3" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "3bus_unbal.l1" => Dict{String, Any}("qd_bus" => [1333.3300000000002], "pd_bus" => [4000.0], "qd" => [1333.3300000000002], "pd" => [4000.0])), "bus" => Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], "vm" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], "vm" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], "vm" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], "vm" => [124.83030630100751, 124.83048117738736, 124.8306695534823])), "per_unit" => false)
+
+[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}("multinetwork" => false, "boundary" => Dict{String, Any}("(100001, 5, voltage_source.3bus_unbal.source)" => Dict{String, Any}("pbound_fr" => [8068.452673591816], "qbound_fr" => [4367.184067738673]), "(100001, voltage_source.3bus_unbal.source, 5)" => Dict{String, Any}("pbound_to" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], "qbound_to" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369])))

Example Case #2: Solving a Multinetwork (Time-series) Multisystem (Multiple Distribution Systems) OPFITD

Test Case #2

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a Multinetwork case where we have the PJM 5-bus system (case5_with2loads) as the transmission system and two copies of the IEEE 4 Node Test Feeder (case3_unbalanced_withoutgen_mn.dss) as the distribution systems, where each distribution system has load profiles for their respective loads for four timesteps. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3x2.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Julia Code for Test Case #2

using PowerModelsITD
+using Ipopt
+
+silence!()  # Silences the console, so warning messages or information are not displayed
+
+files_path = joinpath(dirname(pathof(PowerModelsITD)), "..")                                    # file path for test cases files
+pm_file = joinpath(files_path, "test/data/transmission/case5_with2loads.m")                     # transmission system file
+pmd_file = joinpath(files_path, "test/data/distribution/case3_unbalanced_withoutgen_mn.dss")    # distribution system file
+boundary_file = joinpath(files_path, "test/data/json/case5_case3x2.json")                       # boundary file with info. about boundary buses
+pmd_files = [pmd_file, pmd_file]                                                                # vector of distrib. systems (in this case a copy of the same)
+formulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}                                    # type of formulation to be used
+result = solve_mn_opfitd(pm_file, pmd_files, boundary_file, formulation, Ipopt.Optimizer; auto_rename=true)  # solve the multinetwork opfitd
+
+# Check the result
+@info "Objective: $(result["objective"]) [\$/hr]"
+@info "Termination Status of Solver: $(result["termination_status"])"
+@info "Solve Time: $(result["solve_time"]) [seconds]"
+@info "Solution Values for Transmission system: $(result["solution"]["it"]["pm"])"
+@info "Solution Values for Distribution system(s): $(result["solution"]["it"]["pmd"])"
+@info "Solution Values for Boundary(ies): $(result["solution"]["it"]["pmitd"])"

Console Output for Test Case #2

After running the corresponding code, the user should get the following output displayed on the console.

[ Main | Info ] : Objective: 71583.37023067646 [$/hr]
+[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED
+[ Main | Info ] : Solve Time: 0.5699648857116699 [seconds]
+
+[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}("multinetwork" => true, "nw" => Dict{String, Any}("4" => Dict{String, Any}("baseMVA" => 100.0, "branch" => Dict{String, Any}("3" => Dict{String, Any}("qf" => 209.7124512609962, "qt" => -205.25808038279263, "pt" => 220.4516503859562, "pf" => -219.74655219293345), "4" => Dict{String, Any}("qf" => -214.48170261865238, "qt" => 218.94452403011204, "pt" => 70.63553676891648, "pf" => -70.02040086637558), "1" => Dict{String, Any}("qf" => -93.26577989474518, "qt" => 114.45283104138902, "pt" => -235.99842638945864, "pf" => 238.17872276993856), "5" => Dict{String, Any}("qf" => 72.445478971592, "qt" => -70.00150166186677, "pt" => 57.688800117737046, "pf" => -57.388497698913255), "2" => Dict{String, Any}("qf" => 41.053330496054876, "qt" => -27.739129989384807, "pt" => -190.18204403801204, "pf" => 191.56783204014675), "6" => Dict{String, Any}("qf" => 19.29122822256867, "qt" => 1.0536848339377651, "pt" => 239.99768816280888, "pf" => -237.90830703516832), "7" => Dict{String, Any}("qf" => 1.418871577263358, "qt" => -2.003521254092567, "pt" => -6.017516284814005, "pf" => 6.018827255834227), "8" => Dict{String, Any}("qf" => 0.7049338049713338, "qt" => -1.2985975532566612, "pt" => -3.008593331044258, "pf" => 3.008930510206021)), "gen" => Dict{String, Any}("4" => Dict{String, Any}("qg" => 53.02059657131708, "pg" => 19.598449044556656), "1" => Dict{String, Any}("qg" => 30.00000079365296, "pg" => 40.00000096679825), "5" => Dict{String, Any}("qg" => -204.20439554885485, "pg" => 460.449338548765), "2" => Dict{String, Any}("qg" => 127.50000106865294, "pg" => 170.0000016503536), "3" => Dict{String, Any}("qg" => 390.00000300170404, "pg" => 313.2470390700032)), "bus" => Dict{String, Any}("4" => Dict{String, Any}("va" => -4.8091331437638894e-29, "vm" => 0.8999999900913073), "1" => Dict{String, Any}("va" => 3.955108495412184, "vm" => 0.9178896115768673), "5" => Dict{String, Any}("va" => -0.7695989397082574, "vm" => 0.9413800134626195), "2" => Dict{String, Any}("va" => -0.6574104691903474, "vm" => 0.9421095463639055), "6" => Dict{String, Any}("va" => -0.8254740984569308, "vm" => 0.9409689065117178), "10" => Dict{String, Any}("va" => 5.018515926892925, "vm" => 0.9048635910623162), "3" => Dict{String, Any}("va" => -0.3270759541168204, "vm" => 0.967421494353026))), "1" => Dict{String, Any}("baseMVA" => 100.0, "branch" => Dict{String, Any}("3" => Dict{String, Any}("qf" => 209.71245126093345, "qt" => -205.25808038273263, "pt" => 220.4516503861189, "pf" => -219.74655219309614), "4" => Dict{String, Any}("qf" => -214.4817026186947, "qt" => 218.94452403016115, "pt" => 70.6355367692654, "pf" => -70.02040086672375), "1" => Dict{String, Any}("qf" => -93.26577989466723, "qt" => 114.45283104133719, "pt" => -235.9984263896544, "pf" => 238.17872277013694), "5" => Dict{String, Any}("qf" => 72.44547897154284, "qt" => -70.001501661815, "pt" => 57.68880011784228, "pf" => -57.38849769901818), "2" => Dict{String, Any}("qf" => 41.05333049603968, "qt" => -27.73912998937486, "pt" => -190.1820440379769, "pf" => 191.56783204011106), "6" => Dict{String, Any}("qf" => 19.291228222568602, "qt" => 1.0536848339378524, "pt" => 239.99768816280888, "pf" => -237.90830703516832), "7" => Dict{String, Any}("qf" => 1.4188715773575376, "qt" => -2.003521254185469, "pt" => -6.017516285357827, "pf" => 6.0188272563781675), "8" => Dict{String, Any}("qf" => 0.7049338050415234, "qt" => -1.2985975533248926, "pt" => -3.0085933319508262, "pf" => 3.0089305111127547)), "gen" => Dict{String, Any}("4" => Dict{String, Any}("qg" => 53.02059657137874, "pg" => 19.598449044697038), "1" => Dict{String, Any}("qg" => 30.00000079365296, "pg" => 40.00000096679825), "5" => Dict{String, Any}("qg" => -204.2043955487948, "pg" => 460.44933854892776), "2" => Dict{String, Any}("qg" => 127.50000106865294, "pg" => 170.0000016503536), "3" => Dict{String, Any}("qg" => 390.00000300170404, "pg" => 313.24703907024724)), "bus" => Dict{String, Any}("4" => Dict{String, Any}("va" => 1.2906268155608688e-29, "vm" => 0.8999999900913073), "1" => Dict{String, Any}("va" => 3.9551084954114852, "vm" => 0.9178896115768619), "5" => Dict{String, Any}("va" => -0.7695989397229616, "vm" => 0.9413800134625423), "2" => Dict{String, Any}("va" => -0.6574104691947822, "vm" => 0.9421095463638751), "6" => Dict{String, Any}("va" => -0.8254740984889308, "vm" => 0.9409689065115902), "10" => Dict{String, Any}("va" => 5.018515926892924, "vm" => 0.9048635910623162), "3" => Dict{String, Any}("va" => -0.3270759541189024, "vm" => 0.9674214943530053))), "2" => Dict{String, Any}("baseMVA" => 100.0, "branch" => Dict{String, Any}("3" => Dict{String, Any}("qf" => 209.71245126094163, "qt" => -205.25808038273715, "pt" => 220.45165038612856, "pf" => -219.74655219310594), "4" => Dict{String, Any}("qf" => -214.4817026186913, "qt" => 218.94452403015868, "pt" => 70.63553676925657, "pf" => -70.02040086671512), "1" => Dict{String, Any}("qf" => -93.26577989467265, "qt" => 114.45283104134505, "pt" => -235.99842638966595, "pf" => 238.1787227701487), "5" => Dict{String, Any}("qf" => 72.44547897154538, "qt" => -70.00150166181722, "pt" => 57.688800117857696, "pf" => -57.38849769903358), "2" => Dict{String, Any}("qf" => 41.053330496036935, "qt" => -27.739129989371886, "pt" => -190.18204403797492, "pf" => 191.56783204010912), "6" => Dict{String, Any}("qf" => 19.291228222572368, "qt" => 1.0536848339335343, "pt" => 239.99768816280888, "pf" => -237.90830703516826), "7" => Dict{String, Any}("qf" => 1.4188715773462648, "qt" => -2.0035212541732794, "pt" => -6.017516285360724, "pf" => 6.0188272563810745), "8" => Dict{String, Any}("qf" => 0.7049338050293561, "qt" => -1.2985975533139513, "pt" => -3.008593331590926, "pf" => 3.008930510752742)), "gen" => Dict{String, Any}("4" => Dict{String, Any}("qg" => 53.02059657138327, "pg" => 19.59844904471449), "1" => Dict{String, Any}("qg" => 30.00000079365296, "pg" => 40.00000096679825), "5" => Dict{String, Any}("qg" => -204.2043955488037, "pg" => 460.4493385489374), "2" => Dict{String, Any}("qg" => 127.50000106865294, "pg" => 170.0000016503536), "3" => Dict{String, Any}("qg" => 390.00000300170404, "pg" => 313.24703907022297)), "bus" => Dict{String, Any}("4" => Dict{String, Any}("va" => -8.850496391421805e-29, "vm" => 0.8999999900913073), "1" => Dict{String, Any}("va" => 3.9551084954114537, "vm" => 0.9178896115768609), "5" => Dict{String, Any}("va" => -0.7695989397233032, "vm" => 0.9413800134625466), "2" => Dict{String, Any}("va" => -0.6574104691950458, "vm" => 0.9421095463638758), "6" => Dict{String, Any}("va" => -0.8254740984823784, "vm" => 0.9409689065116095), "10" => Dict{String, Any}("va" => 5.018515926892941, "vm" => 0.9048635910623148), "3" => Dict{String, Any}("va" => -0.3270759541192233, "vm" => 0.9674214943530055))), "3" => Dict{String, Any}("baseMVA" => 100.0, "branch" => Dict{String, Any}("3" => Dict{String, Any}("qf" => 209.7124512609906, "qt" => -205.2580803827864, "pt" => 220.45165038608707, "pf" => -219.7465521930642), "4" => Dict{String, Any}("qf" => -214.48170261865874, "qt" => 218.94452403012218, "pt" => 70.63553676895856, "pf" => -70.0204008664175), "1" => Dict{String, Any}("qf" => -93.26577989472547, "qt" => 114.45283104139405, "pt" => -235.9984263896151, "pf" => 238.17872277009747), "5" => Dict{String, Any}("qf" => 72.44547897158185, "qt" => -70.00150166185058, "pt" => 57.6888001178973, "pf" => -57.38849769907291), "2" => Dict{String, Any}("qf" => 41.05333049604079, "qt" => -27.739129989375172, "pt" => -190.1820440379844, "pf" => 191.56783204011862), "6" => Dict{String, Any}("qf" => 19.291228222579896, "qt" => 1.0536848339270362, "pt" => 239.99768816280894, "pf" => -237.90830703516818), "7" => Dict{String, Any}("qf" => 1.4188715772646756, "qt" => -2.0035212540928145, "pt" => -6.017516285012341, "pf" => 6.018827256032563), "8" => Dict{String, Any}("qf" => 0.7049338050059494, "qt" => -1.298597553290569, "pt" => -3.008593331239918, "pf" => 3.0089305104016915)), "gen" => Dict{String, Any}("4" => Dict{String, Any}("qg" => 53.02059657135414, "pg" => 19.598449044744708), "1" => Dict{String, Any}("qg" => 30.00000079365296, "pg" => 40.00000096679825), "5" => Dict{String, Any}("qg" => -204.20439554885937, "pg" => 460.44933854889604), "2" => Dict{String, Any}("qg" => 127.50000106865294, "pg" => 170.0000016503536), "3" => Dict{String, Any}("qg" => 390.00000300170404, "pg" => 313.24703906988566)), "bus" => Dict{String, Any}("4" => Dict{String, Any}("va" => 4.6922476467138066e-29, "vm" => 0.8999999900913073), "1" => Dict{String, Any}("va" => 3.9551084954116407, "vm" => 0.9178896115768624), "5" => Dict{String, Any}("va" => -0.7695989397156218, "vm" => 0.9413800134626014), "2" => Dict{String, Any}("va" => -0.6574104691939039, "vm" => 0.9421095463638939), "6" => Dict{String, Any}("va" => -0.8254740984679912, "vm" => 0.9409689065116826), "10" => Dict{String, Any}("va" => 5.0185159268929675, "vm" => 0.9048635910623125), "3" => Dict{String, Any}("va" => -0.3270759541200902, "vm" => 0.967421494353016)))), "per_unit" => false)
+
+[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("nw" => Dict{String, Dict{String, Any}}("4" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.5777180879746, 449.1439873945076, 448.7567158126756], "qt" => [-400.3834881406001, -449.61753973455666, -449.40808066075476], "pt" => [-1202.2047813968609, -900.9716820211081, -901.437570378043], "pf" => [1204.092342226798, 901.8028241168121, 902.6707125959695]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.3857159633698, 449.61909326817045, 449.40944838966254], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.206724198158, 900.9725348138786, 901.4388339186033]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.3834881406001, 449.61753973455666, 449.40808066075476], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2047813968609, 900.9716820211081, 901.437570378043]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.5820103770306, 449.147016724407, 448.75940230925625], "qt" => [-400.3857159633698, -449.61909326817045, -449.40944838966254], "pt" => [-1202.206724198158, -900.9725348138786, -901.4388339186033], "pf" => [1204.0959489625075, 901.8044071741432, 902.673061143103])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.60383553276677, 449.1607731500957, 448.77317528774904], [-400.5820103770306, -449.147016724407, -448.75940230925625]], "p" => [[1204.0981313859945, 901.8057826939303, 902.6744388456775], [-1204.0959489625075, -901.8044071741432, -902.673061143103]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.59952401926625, 449.1577317466543, 448.77047663804154], [-400.5777180879746, -449.1439873945076, -448.7567158126756]], "p" => [[1204.0945224674979, 901.804198545205, 902.672088661453], [-1204.092342226798, -901.8028241168121, -902.6707125959695]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.8302295799057324, -120.79137859901346, 119.2504000096645], "vm" => [7.472201725143692, 7.48392238161073, 7.479449806375467]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194665752, -120.77035368944988, 119.22965458272802], "vm" => [125.00492912857915, 125.0049742054994, 125.00503001738106]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.7991413115394987, -120.78074600616584, 119.23848685007212], "vm" => [7.487284000425346, 7.492696895897028, 7.490619086774545]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.855042232531755, -120.83663088144945, 119.18261888118052], "vm" => [7.484002753336548, 7.489418049928727, 7.487339328524334]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.7715260550666929, -120.77101852028557, 119.22898904907676], "vm" => [7.500242832893439, 7.500243675517293, 7.50024705477223]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.8264989754781323, -120.82622950863666, 119.173778769923], "vm" => [124.95033736057859, 124.95038246062096, 124.95043829748143]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.8274029028977026, -120.8268949215367, 119.17311265297246], "vm" => [7.496967303220576, 7.496968146567504, 7.496971527361585]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649359917, -120.84727282112708, 119.19454256329932], "vm" => [7.468913830909152, 7.480639684348965, 7.476165145424161])), "per_unit" => false), "1" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.57771808779745, 449.1439873947322, 448.7567158126303], "qt" => [-400.38348814059987, -449.6175397346913, -449.40808066071014], "pt" => [-1202.204781396862, -900.9716820213755, -901.4375703783082], "pf" => [1204.09234222689, 901.8028241171684, 902.6707125964111]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.3857159634153, 449.6190932679933, 449.40944838961826], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2067241982484, 900.9725348139676, 901.4388339183369]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.38348814059987, 449.6175397346913, 449.40808066071014], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.204781396862, 900.9716820213755, 901.4375703783082]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.5820103772543, 449.14701672423075, 448.75940230921145], "qt" => [-400.3857159634153, -449.6190932679933, -449.40944838961826], "pt" => [-1202.2067241982484, -900.9725348139676, -901.4388339183369], "pf" => [1204.095948962688, 901.8044071742323, 902.6730611427464])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.60383553298436, 449.16077317266615, 448.77317528770436], [-400.5820103772543, -449.14701672423075, -448.75940230921145]], "p" => [[1204.0981315680738, 901.8057830578177, 902.6744392091184], [-1204.095948962688, -901.8044071742323, -902.6730611427464]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.59952401908913, 449.15773174687035, 448.7704766493643], [-400.57771808779745, -449.1439873947322, -448.7567158126303]], "p" => [[1204.0945221037925, 901.8041985455613, 902.6720886618943], [-1204.09234222689, -901.8028241171684, -902.6707125964111]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.830229579920092, -120.79137859902801, 119.25040000964974], "vm" => [7.4722017251430914, 7.483922381610104, 7.479449806374842]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194809523, -120.77035368946459, 119.22965458271331], "vm" => [125.0049291285691, 125.00497420548916, 125.00503001737073]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.7991413115538781, -120.78074600618037, 119.23848685005738], "vm" => [7.4872840004247445, 7.4926968958964055, 7.490619086773919]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.8550422325640687, -120.83663088148208, 119.18261888114806], "vm" => [7.484002753335518, 7.489418049927689, 7.487339328523306]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.7715260550810701, -120.77101852030012, 119.22898904906208], "vm" => [7.5002428328928366, 7.500243675516679, 7.5002470547716085]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.8264989755103133, -120.826229508669, 119.17377876989066], "vm" => [124.95033736056153, 124.95038246060375, 124.95043829746425]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.827402902930025, -120.82689492156933, 119.17311265293998], "vm" => [7.4969673032195505, 7.496968146566467, 7.496971527360553]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649683284, -120.84727282115972, 119.19454256326688], "vm" => [7.468913830908116, 7.4806396843479295, 7.476165145423132])), "per_unit" => false), "2" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.5777180878409, 449.1439873945529, 448.75671581271985], "qt" => [-400.3834881405547, -449.6175397345132, -449.40808066079904], "pt" => [-1202.2047813968604, -900.9716820211088, -901.4375703779534], "pf" => [1204.0923422269757, 901.8028241166346, 902.6707125959689]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.3857159633255, 449.6190932685255, 449.40944838966266], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2067241982472, 900.9725348141451, 901.4388339188698]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.3834881405547, 449.6175397345132, 449.40808066079904], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2047813968604, 900.9716820211088, 901.4375703779534]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.58201037707516, 449.1470167248505, 448.75940230925687], "qt" => [-400.3857159633255, -449.6190932685255, -449.40944838966266], "pt" => [-1202.2067241982472, -900.9725348141451, -901.4388339188698], "pf" => [1204.095948962507, 901.8044071744985, 902.6730611437251])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.6038355441561, 449.16077316190854, 448.7731752991101], [-400.58201037707516, -449.1470167248505, -448.75940230925687]], "p" => [[1204.098131204093, 901.8057832399824, 902.6744390281976], [-1204.095948962507, -901.8044071744985, -902.6730611437251]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.5995240305012, 449.157731758069, 448.77047663808975], [-400.5777180878409, -449.1439873945529, -448.75671581271985]], "p" => [[1204.0945224676755, 901.8041985450279, 902.6720886614527], [-1204.0923422269757, -901.8028241166346, -902.6707125959689]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.8302295799209277, -120.79137859902852, 119.25040000964935], "vm" => [7.472201725143105, 7.483922381610151, 7.479449806374883]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194816114, -120.77035368946491, 119.22965458271298], "vm" => [125.00492912856943, 125.00497420548972, 125.00503001737137]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.79914131155471, -120.78074600618085, 119.23848685005699], "vm" => [7.48728400042476, 7.492696895896448, 7.4906190867739575]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.85504223255677, -120.83663088147543, 119.18261888115482], "vm" => [7.4840027533357, 7.489418049927836, 7.487339328523451]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.77152605508187, -120.77101852030057, 119.2289890490616], "vm" => [7.500242832892855, 7.5002436755167095, 7.500247054771646]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.826498975503429, -120.82622950866259, 119.1737787698974], "vm" => [124.95033736056432, 124.95038246060629, 124.95043829746685]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.8274029029227165, -120.82689492156277, 119.17311265294684], "vm" => [7.496967303219722, 7.496968146566622, 7.49697152736071]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649610355, -120.84727282115303, 119.19454256327364], "vm" => [7.468913830908303, 7.480639684348074, 7.476165145423272])), "per_unit" => false), "3" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.5777180877519, 449.1439873945082, 448.75671581263083], "qt" => [-400.38348814055513, -449.6175397345571, -449.4080806607989], "pt" => [-1202.20478139695, -900.9716820211972, -901.4375703778643], "pf" => [1204.092342226887, 901.8028241168124, 902.6707125957021]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.38571596332577, 449.6190932680813, 449.40944838961764], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2067241981586, 900.9725348138778, 901.4388339183367]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.38348814055513, 449.6175397345571, 449.4080806607989], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.20478139695, 900.9716820211972, 901.4375703778643]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.5820103769862, 449.14701672440617, 448.759402309122], "qt" => [-400.38571596332577, -449.6190932680813, -449.40944838961764], "pt" => [-1202.2067241981586, -900.9725348138778, -901.4388339183367], "pf" => [1204.0959489624188, 901.8044071739638, 902.6730611429242])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.6038355327163, 449.16077315009466, 448.773175287606], [-400.5820103769862, -449.14701672440617, -448.759402309122]], "p" => [[1204.0981315678043, 901.8057826937508, 902.6744388454978], [-1204.0959489624188, -901.8044071739638, -902.6730611429242]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.5995240190437, 449.1577317239183, 448.7704766379962], [-400.5777180877519, -449.1439873945082, -448.75671581263083]], "p" => [[1204.0945224675868, 901.8041985452063, 902.6720886611851], [-1204.092342226887, -901.8028241168124, -902.6707125957021]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.8302295799131064, -120.79137859902089, 119.25040000965717], "vm" => [7.4722017251435435, 7.483922381610589, 7.479449806375325]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194739376, -120.77035368945725, 119.22965458272064], "vm" => [125.00492912857676, 125.00497420549705, 125.00503001737864]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.7991413115468873, -120.78074600617322, 119.23848685006479], "vm" => [7.487284000425199, 7.492696895896888, 7.490619086774399]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.85504223254311, -120.8366308814605, 119.18261888116959], "vm" => [7.484002753336263, 7.489418049928443, 7.487339328524058]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.7715260550740553, -120.77101852029291, 119.2289890490694], "vm" => [7.500242832893295, 7.500243675517153, 7.500247054772084]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.8264989754893535, -120.82622950864773, 119.17377876991193], "vm" => [124.95033736057383, 124.95038246061625, 124.95043829747675]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.8274029029090649, -120.82689492154778, 119.17311265296155], "vm" => [7.496967303220288, 7.496968146567221, 7.496971527361306]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649473606, -120.84727282113812, 119.19454256328841], "vm" => [7.468913830908865, 7.480639684348685, 7.4761651454238836])), "per_unit" => false)))
+
+[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}("multinetwork" => true, "nw" => Dict{String, Any}("4" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049622880614, -901.8100181254906, -902.6783506307055], "qbound_to" => [-400.630030776433, -449.177722118188, -448.78980036204024]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.593331044258], "qbound_fr" => [1298.597553256661]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.5857746079846], "qbound_fr" => [1298.5874491212335]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.101347358377, -901.8084302478388, -902.6759970017687], "qbound_to" => [-400.6256962072555, -449.17466583314587, -448.7870870808322]))), "1" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049624672987, -901.8100184922217, -902.6783509913059], "qbound_to" => [-400.6300307993883, -449.17772215213427, -448.78980037337016]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.5933319508263], "qbound_fr" => [1298.5975533248927]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.5857742450717], "qbound_fr" => [1298.5874491439454]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013469861416, -901.8084302538781, -902.6759970050523], "qbound_to" => [-400.6256961956958, -449.17466584472527, -448.78708710352413]))), "2" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049621118384, -901.8100186687032, -902.6783508103842], "qbound_to" => [-400.63003079917036, -449.17772213001075, -448.7898003847704]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.593331590926], "qbound_fr" => [1298.5975533139513]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.585774607983], "qbound_fr" => [1298.5874491439235]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013473528665, -901.8084302476616, -902.6759970074544], "qbound_to" => [-400.6256962184772, -449.1746658331913, -448.7870870922549]))), "3" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049624727136, -901.8100181281534, -902.6783506390512], "qbound_to" => [-400.6300307763823, -449.1777221295564, -448.7898003846302]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.5933312399184], "qbound_fr" => [1298.5975532905688]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.58577461065], "qbound_fr" => [1298.587449086865]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013473527794, -901.8084302506836, -902.6759970071865], "qbound_to" => [-400.62569618428887, -449.1746658104148, -448.7870870921613])))))

As you can see on the output, the dictionary results have extra keys such as nw, which indicate that this is a multinetwork (multi-timestep) optimization problem. Below the nw, you can find the solutions of the respective multinetwork (i.e., timestep) as "#" (e.g., ["nw"]["3"] represents the results for the 3th timestep).

Example Case #3: Solving OPFITD with voltage bounds (support for PowerModelsDistribution (PMD) Transformations)

Test Case #3

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Additionally, we are specifying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).

Julia Code for Test Case #3

using PowerModelsITD
+using Ipopt
+
+silence!()  # Silences the console, so warning messages or information are not displayed
+
+files_path = joinpath(dirname(pathof(PowerModelsITD)), "..")                    # file path for test cases files
+pm_file = joinpath(files_path, "test/data/transmission/case5_withload.m")       # transmission system file
+pmd_file = joinpath(files_path, "test/data/distribution/case3_unbalanced.dss")  # distribution system file
+boundary_file = joinpath(files_path, "test/data/json/case5_case3_unbal.json")   # boundary file with info. about boundary buses
+formulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}                    # type of formulation to be used
+data = parse_files(pm_file, pmd_file, boundary_file)                        # parse files into dictionary
+# apply transformations
+apply_voltage_bounds!(data; vm_lb=0.99, vm_ub=1.01)
+# solve the optimization problem
+result = solve_opfitd(data, formulation, Ipopt.Optimizer; make_si=false)                   # solve the opfitd
+
+# Check the result
+@info "Objective: $(result["objective"]) [\$/hr]"
+@info "Termination Status of Solver: $(result["termination_status"])"
+@info "Solve Time: $(result["solve_time"]) [seconds]"
+@info "Solution Values for Distribution system(s): $(result["solution"]["it"]["pmd"]["bus"])"

Console Output for Test Case #3

After running the corresponding code, the user should get the following output displayed on the console.

[ Main | Info ] : Objective: 18022.355809587236 [$/hr]
+[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED
+[ Main | Info ] : Solve Time: 0.06421494483947754 [seconds]
+
+[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.8977463887653532, -120.78309685941274, 119.34177620647625], "vm" => [0.9899999900302301, 0.9946671975187621, 0.9928991397184561]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.7693363623113275, -120.76782278704773, 119.23219208890347], "vm" => [0.999742728740167, 0.999743306402737, 0.9997446568367797]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8297020935620707, -120.77556386286943, 119.28178890967312], "vm" => [0.9952384467648019, 0.9973943491437465, 0.9965725113327532]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.7671158858601453, -120.76631338622572, 119.23370678684667], "vm" => [0.9997629892456953, 0.9997641961144075, 0.9997655262819723]))

You can see in these results that the voltage magnitude values of the distribution system nodes is between the 0.99 and 1.01 bounds.

Example Case #4: Solving OPFITD with Solution Processors (apply solution processor to convert voltage values solutions from rectangular to polar coordinates)

Test Case #4

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).

Finally, we also want to solve this problem using the ACR-ACRU formulation (i.e., AC OPF in rectangular coordinates) instead of the ACP-ACPU formulation used previously. We also want to show that by applying the solution processor to the solve_opfitd(...) function, we can convert the solution from rectangular to polar coordinates (after the problem has been solved in rectangular coordinates).

Julia Code for Test Case #4

using PowerModelsITD
+using Ipopt
+
+silence!()  # Silences the console, so warning messages or information are not displayed
+
+files_path = joinpath(dirname(pathof(PowerModelsITD)), "..")                    # file path for test cases files
+pm_file = joinpath(files_path, "test/data/transmission/case5_withload.m")       # transmission system file
+pmd_file = joinpath(files_path, "test/data/distribution/case3_unbalanced.dss")  # distribution system file
+boundary_file = joinpath(files_path, "test/data/json/case5_case3_unbal.json")   # boundary file with info. about boundary buses
+formulation = NLPowerModelITD{ACRPowerModel, ACRUPowerModel}                    # type of formulation to be used
+
+data_rect = parse_files(pm_file, pmd_file, boundary_file)                       # parse files into dictionary - rectangular
+data_polar = deepcopy(data_rect)                                                # parse files into dictionary - polar
+
+# apply voltage bounds to both datasets
+apply_voltage_bounds!(data_rect; vm_lb=0.99, vm_ub=1.01)
+apply_voltage_bounds!(data_polar; vm_lb=0.99, vm_ub=1.01)
+
+# solve the optimization problem
+result_rect = solve_opfitd(data_rect, formulation, Ipopt.Optimizer; make_si=false)                                          # solve the opfitd, present result in rectangular
+result_polar = solve_opfitd(data_polar, formulation, Ipopt.Optimizer; make_si=false, solution_processors=[sol_data_model!]) # solve the opfitd, present the result in polar
+
+# Check the result
+@info "Distribution system(s) voltages in rectangular coordinates: $(result_rect["solution"]["it"]["pmd"]["bus"])"
+@info "Distribution system(s) voltages in polar coordinates: $(result_polar["solution"]["it"]["pmd"]["bus"])"

Console Output for Test Case #4

After running the corresponding code, the user should get the following output displayed on the console.

[ Main | Info ] : Distribution system(s) voltages in rectangular coordinates: Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("vi" => [-0.015511309363640641, -0.8545294554234174, 0.8655223138026301], "vr" => [0.9898784720063777, -0.5090601668099762, -0.4865386272048753]), "3bus_unbal.substation" => Dict{String, Any}("vi" => [-0.013423594907906103, -0.8590267647200966, 0.872425011363218], "vr" => [0.9996526099437699, -0.5114290820733716, -0.48822534573738224]), "3bus_unbal.primary" => Dict{String, Any}("vi" => [-0.014411577636549404, -0.8569394862376708, 0.8692352392326611], "vr" => [0.9951341025954522, -0.5103432319817417, -0.4874288450833038]), "3bus_unbal.sourcebus" => Dict{String, Any}("vi" => [-0.01338512498983875, -0.8590581872270858, 0.8724303155121654], "vr" => [0.9996733881089848, -0.5114171375591623, -0.4882586014767347]))
+
+[ Main | Info ] : Distribution system(s) voltages in polar coordinates: Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.8977463956228972, -120.78309686739179, 119.34177619725007], "vm" => [0.989999994979725, 0.9946672024445378, 0.9928991446530021]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.7693363704348831, -120.76782279518537, 119.23219208076581], "vm" => [0.9997427336408314, 0.9997433113034004, 0.9997446617374346]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8297021010938084, -120.77556387092758, 119.28178890104428], "vm" => [0.9952384516880516, 0.9973943540560338, 0.9965725162491212]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.767115894005601, -120.7663133943784, 119.23370677869384], "vm" => [0.9997629941462579, 0.9997642010149662, 0.9997655311825235]))

Example Case #5: Solving OPFITD with Results in MATH Model (instead of default ENG)

Test Case #5

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

However, different from all the examples presented above, in this case, the result of the distribution systems will be obtained in the MATH model instead of the default ENG model. See here for a more detailed explanation regarding the different models supported by PMD/PMITD.

Julia Code for Test Case #5

using PowerModelsITD
+using Ipopt
+
+silence!()  # Silences the console, so warning messages or information are not displayed
+
+files_path = joinpath(dirname(pathof(PowerModelsITD)), "..")                    # file path for test cases files
+pm_file = joinpath(files_path, "test/data/transmission/case5_withload.m")       # transmission system file
+pmd_file = joinpath(files_path, "test/data/distribution/case3_unbalanced.dss")  # distribution system file
+boundary_file = joinpath(files_path, "test/data/json/case5_case3_unbal.json")   # boundary file with info. about boundary buses
+formulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}                    # type of formulation to be used
+data = parse_files(pm_file, pmd_file, boundary_file)                            # parse files into dictionary
+result = solve_opfitd(data, formulation, Ipopt.Optimizer; solution_model="MATH") # solve the opfitd, present result in MATH model instead of default ENG
+
+# Check the result
+@info "Objective: $(result["objective"]) [\$/hr]"
+@info "Termination Status of Solver: $(result["termination_status"])"
+@info "Solve Time: $(result["solve_time"]) [seconds]"
+@info "Solution Values (MATH model) for Distribution system(s): $(result["solution"]["it"]["pmd"])"
+@info "Solution Values (MATH model) for Boundary(ies): $(result["solution"]["it"]["pmitd"])"
+

Console Output for Test Case #5

After running the corresponding code, the user should get the following output displayed on the console.

[ Main | Info ] : Objective: 17953.746512039743 [$/hr]
+[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED
+[ Main | Info ] : Solve Time: 0.07705187797546387 [seconds]
+
+[ Main | Info ] : Solution Values (MATH model) for Distribution system(s): Dict{String, Any}("branch" => Dict{String, Any}("4" => Dict{String, Any}("qf" => [1354.795202241865, 1507.3400640138161, 1504.5761375753734], "qt" => [-1354.6163225169614, -1507.2344513630767, -1504.4700979169072], "pt" => [-3367.119671256992, -2346.3650144634003, -2354.829891017304], "pf" => [3367.119671256992, 2346.3650144634003, 2354.8298910173044]), "1" => Dict{String, Any}("qf" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], "qt" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], "pt" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], "pf" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), "5" => Dict{String, Any}("qf" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], "qt" => [-1354.795202241865, -1507.3400640138161, -1504.5761375753734], "pt" => [-3367.119671256992, -2346.3650144634003, -2354.8298910173044], "pf" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), "2" => Dict{String, Any}("qf" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], "qt" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], "pt" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], "pf" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895]), "6" => Dict{String, Any}("qf" => [1355.0096276913357, 1507.4706735124998, 1504.7037665348369], "qt" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], "pt" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], "pf" => [3367.1850486607445, 2346.4026604158908, 2354.8649645151804]), "3" => Dict{String, Any}("qf" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], "qt" => [1354.6163225169614, 1507.2344513630767, 1504.4700979169072], "pt" => [3367.119671256992, 2346.3650144634003, 2354.829891017304], "pf" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), "gen" => Dict{String, Any}("1" => Dict{String, Any}("qg_bus" => [-0.0, -0.0, -0.0], "qg" => [-0.0, -0.0, -0.0], "pg" => [666.6676628468832, 666.6676628064197, 666.6676628099706], "pg_bus" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), "transformer" => Dict{String, Any}("1" => Dict{String, Any}("qf" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], "qt" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], "pt" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], "pf" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), "2" => Dict{String, Any}("qf" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], "qt" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], "pt" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895], "pf" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), "settings" => Dict{String, Any}("sbase_default" => 100000.0, "vbases_default" => Dict{String, Real}("4" => 132.79056191361394), "voltage_scale_factor" => 1000.0, "sbase" => 100000.0, "power_scale_factor" => 1000.0, "base_frequency" => 60.0), "multinetwork" => false, "load" => Dict{String, Any}("1" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "2" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "3" => Dict{String, Any}("qd_bus" => [1333.3300000000002], "pd_bus" => [4000.0], "qd" => [1333.3300000000002], "pd" => [4000.0])), "bus" => Dict{String, Any}("8" => Dict{String, Any}("va" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], "vm" => [0.5427404621782935, 0.5427412225103798, 0.5427420415368795]), "4" => Dict{String, Any}("va" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], "vm" => [124.83030630100751, 124.83048117738736, 124.8306695534823]), "1" => Dict{String, Any}("va" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], "vm" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), "5" => Dict{String, Any}("va" => [-0.8089868491003656, -120.80727720360223, 119.19273784447546], "vm" => [0.5427292370876581, 0.542729249043147, 0.5427300853404582]), "2" => Dict{String, Any}("va" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], "vm" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), "6" => Dict{String, Any}("va" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], "vm" => [0.5427279962777596, 0.5427283843894555, 0.5427292175687293]), "7" => Dict{String, Any}("va" => [-0.8063670574676239, -120.8054516152584, 119.19457001333551], "vm" => [0.5427392213907619, 0.5427403578738178, 0.5427411737823131]), "9" => Dict{String, Any}("va" => [-0.8036120919989638, -120.80361209199894, 119.19638790800104], "vm" => [124.83485996888251, 124.83485996888251, 124.83485996888251]), "3" => Dict{String, Any}("va" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], "vm" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505])), "per_unit" => false)
+
+[ Main | Info ] : Solution Values (MATH model) for Boundary(ies): Dict{String, Any}("multinetwork" => false, "boundary" => Dict{String, Any}("(100001, 9, 5)" => Dict{String, Any}("pbound_to" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], "qbound_to" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369]), "(100001, 5, 9)" => Dict{String, Any}("pbound_fr" => [8068.452673591816], "qbound_fr" => [4367.184067738673])))

As seen in the console output, the nodes/buses are now referenced by their MATH names (i.e., numbers) and not their actual ENG name.

diff --git a/versions.js b/versions.js index d39dd16..e2f471a 100644 --- a/versions.js +++ b/versions.js @@ -6,5 +6,5 @@ var DOC_VERSIONS = [ "v0.6", "dev", ]; -var DOCUMENTER_NEWEST = "v0.9.1"; +var DOCUMENTER_NEWEST = "v0.9.2"; var DOCUMENTER_STABLE = "stable";