From 8032182c7044456326b6effea28fb3be46fe1838 Mon Sep 17 00:00:00 2001 From: Chris Garling Date: Sun, 26 May 2024 09:29:09 -0400 Subject: [PATCH] Delete previews/PR33 directory --- previews/PR33/.documenter-siteinfo.json | 1 - previews/PR33/assets/documenter.js | 1050 ------- .../PR33/assets/themes/documenter-dark.css | 7 - .../PR33/assets/themes/documenter-light.css | 9 - previews/PR33/assets/themeswap.js | 84 - previews/PR33/assets/warner.js | 52 - previews/PR33/binaries/index.html | 2 - previews/PR33/doc_index/index.html | 2 - previews/PR33/examples/index.html | 2 - previews/PR33/fitting/figures/cmd_hess.png | Bin 155834 -> 0 bytes previews/PR33/fitting/figures/mdf_model.png | Bin 39822 -> 0 bytes previews/PR33/fitting/figures/mean_mh.png | Bin 47757 -> 0 bytes previews/PR33/fitting/figures/model_cmd.png | Bin 50362 -> 0 bytes .../PR33/fitting/fitting_intro/index.html | 16 - previews/PR33/fitting/fixed_amr/index.html | 17 - previews/PR33/fitting/internals/index.html | 39 - previews/PR33/fitting/linear_amr/index.html | 96 - previews/PR33/fitting/log_amr/index.html | 85 - previews/PR33/fitting/log_amr_plot.svg | 2629 ----------------- .../PR33/fitting/unconstrained/index.html | 133 - previews/PR33/helpers/index.html | 6 - previews/PR33/index.html | 2 - previews/PR33/objects.inv | Bin 1658 -> 0 bytes previews/PR33/search_index.js | 3 - previews/PR33/simulate/index.html | 9 - previews/PR33/siteinfo.js | 1 - 26 files changed, 4245 deletions(-) delete mode 100644 previews/PR33/.documenter-siteinfo.json delete mode 100644 previews/PR33/assets/documenter.js delete mode 100644 previews/PR33/assets/themes/documenter-dark.css delete mode 100644 previews/PR33/assets/themes/documenter-light.css delete mode 100644 previews/PR33/assets/themeswap.js delete mode 100644 previews/PR33/assets/warner.js delete mode 100644 previews/PR33/binaries/index.html delete mode 100644 previews/PR33/doc_index/index.html delete mode 100644 previews/PR33/examples/index.html delete mode 100644 previews/PR33/fitting/figures/cmd_hess.png delete mode 100644 previews/PR33/fitting/figures/mdf_model.png delete mode 100644 previews/PR33/fitting/figures/mean_mh.png delete mode 100644 previews/PR33/fitting/figures/model_cmd.png delete mode 100644 previews/PR33/fitting/fitting_intro/index.html delete mode 100644 previews/PR33/fitting/fixed_amr/index.html delete mode 100644 previews/PR33/fitting/internals/index.html delete mode 100644 previews/PR33/fitting/linear_amr/index.html delete mode 100644 previews/PR33/fitting/log_amr/index.html delete mode 100644 previews/PR33/fitting/log_amr_plot.svg delete mode 100644 previews/PR33/fitting/unconstrained/index.html delete mode 100644 previews/PR33/helpers/index.html delete mode 100644 previews/PR33/index.html delete mode 100644 previews/PR33/objects.inv delete mode 100644 previews/PR33/search_index.js delete mode 100644 previews/PR33/simulate/index.html delete mode 100644 previews/PR33/siteinfo.js diff --git a/previews/PR33/.documenter-siteinfo.json b/previews/PR33/.documenter-siteinfo.json deleted file mode 100644 index 0acf8df..0000000 --- a/previews/PR33/.documenter-siteinfo.json +++ /dev/null @@ -1 +0,0 @@ -{"documenter":{"julia_version":"1.10.3","generation_timestamp":"2024-05-20T11:06:47","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/previews/PR33/assets/documenter.js b/previews/PR33/assets/documenter.js deleted file mode 100644 index c6562b5..0000000 --- a/previews/PR33/assets/documenter.js +++ /dev/null @@ -1,1050 +0,0 @@ -// Generated by Documenter.jl -requirejs.config({ - paths: { - 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', - 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', - 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', - 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', - 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', - 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', - 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', - 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', - 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', - }, - shim: { - "highlight-julia": { - "deps": [ - "highlight" - ] - }, - "katex-auto-render": { - "deps": [ - "katex" - ] - }, - "headroom-jquery": { - "deps": [ - "jquery", - "headroom" - ] - }, - "highlight-julia-repl": { - "deps": [ - "highlight" - ] - } -} -}); -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { -$(document).ready(function() { - renderMathInElement( - document.body, - { - "delimiters": [ - { - "left": "$", - "right": "$", - "display": false - }, - { - "left": "$$", - "right": "$$", - "display": true - }, - { - "left": "\\[", - "right": "\\]", - "display": true - } - ] -} - - ); -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { -$(document).ready(function() { - hljs.highlightAll(); -}) - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -let timer = 0; -var isExpanded = true; - -$(document).on("click", ".docstring header", function () { - let articleToggleTitle = "Expand docstring"; - - debounce(() => { - if ($(this).siblings("section").is(":visible")) { - $(this) - .find(".docstring-article-toggle-button") - .removeClass("fa-chevron-down") - .addClass("fa-chevron-right"); - } else { - $(this) - .find(".docstring-article-toggle-button") - .removeClass("fa-chevron-right") - .addClass("fa-chevron-down"); - - articleToggleTitle = "Collapse docstring"; - } - - $(this) - .find(".docstring-article-toggle-button") - .prop("title", articleToggleTitle); - $(this).siblings("section").slideToggle(); - }); -}); - -$(document).on("click", ".docs-article-toggle-button", function (event) { - let articleToggleTitle = "Expand docstring"; - let navArticleToggleTitle = "Expand all docstrings"; - let animationSpeed = event.noToggleAnimation ? 0 : 400; - - debounce(() => { - if (isExpanded) { - $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); - $(".docstring-article-toggle-button") - .removeClass("fa-chevron-down") - .addClass("fa-chevron-right"); - - isExpanded = false; - - $(".docstring section").slideUp(animationSpeed); - } else { - $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); - $(".docstring-article-toggle-button") - .removeClass("fa-chevron-right") - .addClass("fa-chevron-down"); - - isExpanded = true; - articleToggleTitle = "Collapse docstring"; - navArticleToggleTitle = "Collapse all docstrings"; - - $(".docstring section").slideDown(animationSpeed); - } - - $(this).prop("title", navArticleToggleTitle); - $(".docstring-article-toggle-button").prop("title", articleToggleTitle); - }); -}); - -function debounce(callback, timeout = 300) { - if (Date.now() - timer > timeout) { - callback(); - } - - clearTimeout(timer); - - timer = Date.now(); -} - -}) -//////////////////////////////////////////////////////////////////////////////// -require([], function() { -function addCopyButtonCallbacks() { - for (const el of document.getElementsByTagName("pre")) { - const button = document.createElement("button"); - button.classList.add("copy-button", "fa-solid", "fa-copy"); - button.setAttribute("aria-label", "Copy this code block"); - button.setAttribute("title", "Copy"); - - el.appendChild(button); - - const success = function () { - button.classList.add("success", "fa-check"); - button.classList.remove("fa-copy"); - }; - - const failure = function () { - button.classList.add("error", "fa-xmark"); - button.classList.remove("fa-copy"); - }; - - button.addEventListener("click", function () { - copyToClipboard(el.innerText).then(success, failure); - - setTimeout(function () { - button.classList.add("fa-copy"); - button.classList.remove("success", "fa-check", "fa-xmark"); - }, 5000); - }); - } -} - -function copyToClipboard(text) { - // clipboard API is only available in secure contexts - if (window.navigator && window.navigator.clipboard) { - return window.navigator.clipboard.writeText(text); - } else { - return new Promise(function (resolve, reject) { - try { - const el = document.createElement("textarea"); - el.textContent = text; - el.style.position = "fixed"; - el.style.opacity = 0; - document.body.appendChild(el); - el.select(); - document.execCommand("copy"); - - resolve(); - } catch (err) { - reject(err); - } finally { - document.body.removeChild(el); - } - }); - } -} - -if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); -} else { - addCopyButtonCallbacks(); -} - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { - -// Manages the top navigation bar (hides it when the user starts scrolling down on the -// mobile). -window.Headroom = Headroom; // work around buggy module loading? -$(document).ready(function () { - $("#documenter .docs-navbar").headroom({ - tolerance: { up: 10, down: 10 }, - }); -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -$(document).ready(function () { - let meta = $("div[data-docstringscollapsed]").data(); - - if (meta?.docstringscollapsed) { - $("#documenter-article-toggle-button").trigger({ - type: "click", - noToggleAnimation: true, - }); - } -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -/* -To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc - -PSEUDOCODE: - -Searching happens automatically as the user types or adjusts the selected filters. -To preserve responsiveness, as much as possible of the slow parts of the search are done -in a web worker. Searching and result generation are done in the worker, and filtering and -DOM updates are done in the main thread. The filters are in the main thread as they should -be very quick to apply. This lets filters be changed without re-searching with minisearch -(which is possible even if filtering is on the worker thread) and also lets filters be -changed _while_ the worker is searching and without message passing (neither of which are -possible if filtering is on the worker thread) - -SEARCH WORKER: - -Import minisearch - -Build index - -On message from main thread - run search - find the first 200 unique results from each category, and compute their divs for display - note that this is necessary and sufficient information for the main thread to find the - first 200 unique results from any given filter set - post results to main thread - -MAIN: - -Launch worker - -Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) - -On text update - if worker is not running, launch_search() - -launch_search - set worker_is_running to true, set last_search_text to the search text - post the search query to worker - -on message from worker - if last_search_text is not the same as the text in the search field, - the latest search result is not reflective of the latest search query, so update again - launch_search() - otherwise - set worker_is_running to false - - regardless, display the new search results to the user - save the unfiltered_results as a global - update_search() - -on filter click - adjust the filter selection - update_search() - -update_search - apply search filters by looping through the unfiltered_results and finding the first 200 - unique results that match the filters - - Update the DOM -*/ - -/////// SEARCH WORKER /////// - -function worker_function(documenterSearchIndex, documenterBaseURL, filters) { - importScripts( - "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" - ); - - let data = documenterSearchIndex.map((x, key) => { - x["id"] = key; // minisearch requires a unique for each object - return x; - }); - - // list below is the lunr 2.1.3 list minus the intersect with names(Base) - // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) - // ideally we'd just filter the original list but it's not available as a variable - const stopWords = new Set([ - "a", - "able", - "about", - "across", - "after", - "almost", - "also", - "am", - "among", - "an", - "and", - "are", - "as", - "at", - "be", - "because", - "been", - "but", - "by", - "can", - "cannot", - "could", - "dear", - "did", - "does", - "either", - "ever", - "every", - "from", - "got", - "had", - "has", - "have", - "he", - "her", - "hers", - "him", - "his", - "how", - "however", - "i", - "if", - "into", - "it", - "its", - "just", - "least", - "like", - "likely", - "may", - "me", - "might", - "most", - "must", - "my", - "neither", - "no", - "nor", - "not", - "of", - "off", - "often", - "on", - "or", - "other", - "our", - "own", - "rather", - "said", - "say", - "says", - "she", - "should", - "since", - "so", - "some", - "than", - "that", - "the", - "their", - "them", - "then", - "there", - "these", - "they", - "this", - "tis", - "to", - "too", - "twas", - "us", - "wants", - "was", - "we", - "were", - "what", - "when", - "who", - "whom", - "why", - "will", - "would", - "yet", - "you", - "your", - ]); - - let index = new MiniSearch({ - fields: ["title", "text"], // fields to index for full-text search - storeFields: ["location", "title", "text", "category", "page"], // fields to return with results - processTerm: (term) => { - let word = stopWords.has(term) ? null : term; - if (word) { - // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names - word = word - .replace(/^[^a-zA-Z0-9@!]+/, "") - .replace(/[^a-zA-Z0-9@!]+$/, ""); - - word = word.toLowerCase(); - } - - return word ?? null; - }, - // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not - // find anything if searching for "add!", only for the entire qualification - tokenize: (string) => string.split(/[\s\-\.]+/), - // options which will be applied during the search - searchOptions: { - prefix: true, - boost: { title: 100 }, - fuzzy: 2, - }, - }); - - index.addAll(data); - - /** - * Used to map characters to HTML entities. - * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts - */ - const htmlEscapes = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'", - }; - - /** - * Used to match HTML entities and HTML characters. - * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts - */ - const reUnescapedHtml = /[&<>"']/g; - const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** - * Escape function from lodash - * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts - */ - function escape(string) { - return string && reHasUnescapedHtml.test(string) - ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) - : string || ""; - } - - /** - * 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(`${querystring}`, "i").exec(result.text); - let text = - textindex !== null - ? result.text.slice( - Math.max(textindex.index - 100, 0), - Math.min( - textindex.index + querystring.length + 100, - result.text.length - ) - ) - : ""; // cut-off text before and after from the match - - text = text.length ? escape(text) : ""; - - let display_result = text.length - ? "..." + - text.replace( - new RegExp(`${escape(querystring)}`, "i"), // For first occurrence - '$&' - ) + - "..." - : ""; // highlights the match - - let in_code = false; - if (!["page", "section"].includes(result.category.toLowerCase())) { - in_code = true; - } - - // We encode the full url to escape some special characters which can lead to broken links - let result_div = ` - -
-
${escape(result.title)}
-
${result.category}
-
-

- ${display_result} -

-
- ${display_link} -
-
- ${search_divider} - `; - - return result_div; - } - - self.onmessage = function (e) { - let query = e.data; - let results = index.search(query, { - filter: (result) => { - // Only return relevant results - return result.score >= 1; - }, - }); - - // Pre-filter to deduplicate and limit to 200 per category to the extent - // possible without knowing what the filters are. - let filtered_results = []; - let counts = {}; - for (let filter of filters) { - counts[filter] = 0; - } - let present = {}; - - for (let result of results) { - cat = result.category; - cnt = counts[cat]; - if (cnt < 200) { - id = cat + "---" + result.location; - if (present[id]) { - continue; - } - present[id] = true; - filtered_results.push({ - location: result.location, - category: cat, - div: make_search_result(result, query), - }); - } - } - - postMessage(filtered_results); - }; -} - -// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! -const filters = [ - ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), -]; -const worker_str = - "(" + - worker_function.toString() + - ")(" + - JSON.stringify(documenterSearchIndex["docs"]) + - "," + - JSON.stringify(documenterBaseURL) + - "," + - JSON.stringify(filters) + - ")"; -const worker_blob = new Blob([worker_str], { type: "text/javascript" }); -const worker = new Worker(URL.createObjectURL(worker_blob)); - -/////// SEARCH MAIN /////// - -// Whether the worker is currently handling a search. This is a boolean -// as the worker only ever handles 1 or 0 searches at a time. -var worker_is_running = false; - -// The last search text that was sent to the worker. This is used to determine -// if the worker should be launched again when it reports back results. -var last_search_text = ""; - -// The results of the last search. This, in combination with the state of the filters -// in the DOM, is used compute the results to display on calls to update_search. -var unfiltered_results = []; - -// Which filter is currently selected -var selected_filter = ""; - -$(document).on("input", ".documenter-search-input", function (event) { - if (!worker_is_running) { - launch_search(); - } -}); - -function launch_search() { - worker_is_running = true; - last_search_text = $(".documenter-search-input").val(); - worker.postMessage(last_search_text); -} - -worker.onmessage = function (e) { - if (last_search_text !== $(".documenter-search-input").val()) { - launch_search(); - } else { - worker_is_running = false; - } - - unfiltered_results = e.data; - update_search(); -}; - -$(document).on("click", ".search-filter", function () { - if ($(this).hasClass("search-filter-selected")) { - selected_filter = ""; - } else { - selected_filter = $(this).text().toLowerCase(); - } - - // This updates search results and toggles classes for UI: - update_search(); -}); - -/** - * Make/Update the search component - */ -function update_search() { - let querystring = $(".documenter-search-input").val(); - - if (querystring.trim()) { - if (selected_filter == "") { - results = unfiltered_results; - } else { - results = unfiltered_results.filter((result) => { - return selected_filter == result.category.toLowerCase(); - }); - } - - let search_result_container = ``; - let modal_filters = make_modal_body_filters(); - let search_divider = `
`; - - if (results.length) { - let links = []; - let count = 0; - let search_results = ""; - - for (var i = 0, n = results.length; i < n && count < 200; ++i) { - let result = results[i]; - if (result.location && !links.includes(result.location)) { - search_results += result.div; - count++; - links.push(result.location); - } - } - - if (count == 1) { - count_str = "1 result"; - } else if (count == 200) { - count_str = "200+ results"; - } else { - count_str = count + " results"; - } - let result_count = `
${count_str}
`; - - search_result_container = ` -
- ${modal_filters} - ${search_divider} - ${result_count} -
- ${search_results} -
-
- `; - } else { - search_result_container = ` -
- ${modal_filters} - ${search_divider} -
0 result(s)
-
-
No result found!
- `; - } - - if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { - $(".search-modal-card-body").removeClass("is-justify-content-center"); - } - - $(".search-modal-card-body").html(search_result_container); - } else { - if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { - $(".search-modal-card-body").addClass("is-justify-content-center"); - } - - $(".search-modal-card-body").html(` -
Type something to get started!
- `); - } -} - -/** - * Make the modal filter html - * - * @returns string - */ -function make_modal_body_filters() { - let str = filters - .map((val) => { - if (selected_filter == val.toLowerCase()) { - return `${val}`; - } else { - return `${val}`; - } - }) - .join(""); - - return ` -
- Filters: - ${str} -
`; -} - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// Modal settings dialog -$(document).ready(function () { - var settings = $("#documenter-settings"); - $("#documenter-settings-button").click(function () { - settings.toggleClass("is-active"); - }); - // Close the dialog if X is clicked - $("#documenter-settings button.delete").click(function () { - settings.removeClass("is-active"); - }); - // Close dialog if ESC is pressed - $(document).keyup(function (e) { - if (e.keyCode == 27) settings.removeClass("is-active"); - }); -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -$(document).ready(function () { - let search_modal_header = ` - - `; - - let initial_search_body = ` -
Type something to get started!
- `; - - let search_modal_footer = ` - - `; - - $(document.body).append( - ` - - ` - ); - - document.querySelector(".docs-search-query").addEventListener("click", () => { - openModal(); - }); - - document - .querySelector(".close-search-modal") - .addEventListener("click", () => { - closeModal(); - }); - - $(document).on("click", ".search-result-link", function () { - closeModal(); - }); - - document.addEventListener("keydown", (event) => { - if ((event.ctrlKey || event.metaKey) && event.key === "/") { - openModal(); - } else if (event.key === "Escape") { - closeModal(); - } - - return false; - }); - - // Functions to open and close a modal - function openModal() { - let searchModal = document.querySelector("#search-modal"); - - searchModal.classList.add("is-active"); - document.querySelector(".documenter-search-input").focus(); - } - - function closeModal() { - let searchModal = document.querySelector("#search-modal"); - let initial_search_body = ` -
Type something to get started!
- `; - - searchModal.classList.remove("is-active"); - document.querySelector(".documenter-search-input").blur(); - - if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { - $(".search-modal-card-body").addClass("is-justify-content-center"); - } - - $(".documenter-search-input").val(""); - $(".search-modal-card-body").html(initial_search_body); - } - - document - .querySelector("#search-modal .modal-background") - .addEventListener("click", () => { - closeModal(); - }); -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// Manages the showing and hiding of the sidebar. -$(document).ready(function () { - var sidebar = $("#documenter > .docs-sidebar"); - var sidebar_button = $("#documenter-sidebar-button"); - sidebar_button.click(function (ev) { - ev.preventDefault(); - sidebar.toggleClass("visible"); - if (sidebar.hasClass("visible")) { - // Makes sure that the current menu item is visible in the sidebar. - $("#documenter .docs-menu a.is-active").focus(); - } - }); - $("#documenter > .docs-main").bind("click", function (ev) { - if ($(ev.target).is(sidebar_button)) { - return; - } - if (sidebar.hasClass("visible")) { - sidebar.removeClass("visible"); - } - }); -}); - -// Resizes the package name / sitename in the sidebar if it is too wide. -// Inspired by: https://github.com/davatron5000/FitText.js -$(document).ready(function () { - e = $("#documenter .docs-autofit"); - function resize() { - var L = parseInt(e.css("max-width"), 10); - var L0 = e.width(); - if (L0 > L) { - var h0 = parseInt(e.css("font-size"), 10); - e.css("font-size", (L * h0) / L0); - // TODO: make sure it survives resizes? - } - } - // call once and then register events - resize(); - $(window).resize(resize); - $(window).on("orientationchange", resize); -}); - -// Scroll the navigation bar to the currently selected menu item -$(document).ready(function () { - var sidebar = $("#documenter .docs-menu").get(0); - var active = $("#documenter .docs-menu .is-active").get(0); - if (typeof active !== "undefined") { - sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; - } -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// Theme picker setup -$(document).ready(function () { - // onchange callback - $("#documenter-themepicker").change(function themepick_callback(ev) { - var themename = $("#documenter-themepicker option:selected").attr("value"); - if (themename === "auto") { - // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); - window.localStorage.removeItem("documenter-theme"); - } else { - // set_theme(themename); - window.localStorage.setItem("documenter-theme", themename); - } - // We re-use the global function from themeswap.js to actually do the swapping. - set_theme_from_local_storage(); - }); - - // Make sure that the themepicker displays the correct theme when the theme is retrieved - // from localStorage - if (typeof window.localStorage !== "undefined") { - var theme = window.localStorage.getItem("documenter-theme"); - if (theme !== null) { - $("#documenter-themepicker option").each(function (i, e) { - e.selected = e.value === theme; - }); - } - } -}); - -}) -//////////////////////////////////////////////////////////////////////////////// -require(['jquery'], function($) { - -// update the version selector with info from the siteinfo.js and ../versions.js files -$(document).ready(function () { - // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the - // siteinfo.js file, we just return immediately and not display the version selector. - if ( - typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && - DOCUMENTER_VERSION_SELECTOR_DISABLED - ) { - return; - } - - var version_selector = $("#documenter .docs-version-selector"); - var version_selector_select = $("#documenter .docs-version-selector select"); - - version_selector_select.change(function (x) { - target_href = version_selector_select - .children("option:selected") - .get(0).value; - window.location.href = target_href; - }); - - // add the current version to the selector based on siteinfo.js, but only if the selector is empty - if ( - typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && - $("#version-selector > option").length == 0 - ) { - var option = $( - "" - ); - version_selector_select.append(option); - } - - if (typeof DOC_VERSIONS !== "undefined") { - var existing_versions = version_selector_select.children("option"); - var existing_versions_texts = existing_versions.map(function (i, x) { - return x.text; - }); - DOC_VERSIONS.forEach(function (each) { - var version_url = documenterBaseURL + "/../" + each + "/"; - var existing_id = $.inArray(each, existing_versions_texts); - // if not already in the version selector, add it as a new option, - // otherwise update the old option with the URL and enable it - if (existing_id == -1) { - var option = $( - "" - ); - version_selector_select.append(option); - } else { - var option = existing_versions[existing_id]; - option.value = version_url; - option.disabled = false; - } - }); - } - - // only show the version selector if the selector has been populated - if (version_selector_select.children("option").length > 0) { - version_selector.toggleClass("visible"); - } -}); - -}) diff --git a/previews/PR33/assets/themes/documenter-dark.css b/previews/PR33/assets/themes/documenter-dark.css deleted file mode 100644 index 1d71701..0000000 --- a/previews/PR33/assets/themes/documenter-dark.css +++ /dev/null @@ -1,7 +0,0 @@ -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;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #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 a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/previews/PR33/assets/themes/documenter-light.css b/previews/PR33/assets/themes/documenter-light.css deleted file mode 100644 index 07f9d08..0000000 --- a/previews/PR33/assets/themes/documenter-light.css +++ /dev/null @@ -1,9 +0,0 @@ -.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;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#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 a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! - Theme: Default - Description: Original highlight.js style - Author: (c) Ivan Sagalaev - Maintainer: @highlightjs/core-team - Website: https://highlightjs.org/ - License: see project LICENSE - Touched: 2021 -*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/previews/PR33/assets/themeswap.js b/previews/PR33/assets/themeswap.js deleted file mode 100644 index 9f5eebe..0000000 --- a/previews/PR33/assets/themeswap.js +++ /dev/null @@ -1,84 +0,0 @@ -// Small function to quickly swap out themes. Gets put into the tag.. -function set_theme_from_local_storage() { - // Initialize the theme to null, which means default - var theme = null; - // If the browser supports the localstorage and is not disabled then try to get the - // documenter theme - if (window.localStorage != null) { - // Get the user-picked theme from localStorage. May be `null`, which means the default - // theme. - theme = window.localStorage.getItem("documenter-theme"); - } - // Check if the users preference is for dark color scheme - var darkPreference = - window.matchMedia("(prefers-color-scheme: dark)").matches === true; - // Initialize a few variables for the loop: - // - // - active: will contain the index of the theme that should be active. Note that there - // is no guarantee that localStorage contains sane values. If `active` stays `null` - // we either could not find the theme or it is the default (primary) theme anyway. - // Either way, we then need to stick to the primary theme. - // - // - disabled: style sheets that should be disabled (i.e. all the theme style sheets - // that are not the currently active theme) - var active = null; - var disabled = []; - var primaryLightTheme = null; - var primaryDarkTheme = null; - for (var i = 0; i < document.styleSheets.length; i++) { - var ss = document.styleSheets[i]; - // The tag of each style sheet is expected to have a data-theme-name attribute - // which must contain the name of the theme. The names in localStorage much match this. - var themename = ss.ownerNode.getAttribute("data-theme-name"); - // attribute not set => non-theme stylesheet => ignore - if (themename === null) continue; - // To distinguish the default (primary) theme, it needs to have the data-theme-primary - // attribute set. - if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { - primaryLightTheme = themename; - } - // Check if the theme is primary dark theme so that we could store its name in darkTheme - if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { - primaryDarkTheme = themename; - } - // If we find a matching theme (and it's not the default), we'll set active to non-null - if (themename === theme) active = i; - // Store the style sheets of inactive themes so that we could disable them - if (themename !== theme) disabled.push(ss); - } - var activeTheme = null; - if (active !== null) { - // If we did find an active theme, we'll (1) add the theme--$(theme) class to - document.getElementsByTagName("html")[0].className = "theme--" + theme; - activeTheme = theme; - } else { - // If we did _not_ find an active theme, then we need to fall back to the primary theme - // which can either be dark or light, depending on the user's OS preference. - var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; - // In case it somehow happens that the relevant primary theme was not found in the - // preceding loop, we abort without doing anything. - if (activeTheme === null) { - console.error("Unable to determine primary theme."); - return; - } - // When switching to the primary light theme, then we must not have a class name - // for the tag. That's only for non-primary or the primary dark theme. - if (darkPreference) { - document.getElementsByTagName("html")[0].className = - "theme--" + activeTheme; - } else { - document.getElementsByTagName("html")[0].className = ""; - } - } - for (var i = 0; i < document.styleSheets.length; i++) { - var ss = document.styleSheets[i]; - // The tag of each style sheet is expected to have a data-theme-name attribute - // which must contain the name of the theme. The names in localStorage much match this. - var themename = ss.ownerNode.getAttribute("data-theme-name"); - // attribute not set => non-theme stylesheet => ignore - if (themename === null) continue; - // we'll disable all the stylesheets, except for the active one - ss.disabled = !(themename == activeTheme); - } -} -set_theme_from_local_storage(); diff --git a/previews/PR33/assets/warner.js b/previews/PR33/assets/warner.js deleted file mode 100644 index 3f6f5d0..0000000 --- a/previews/PR33/assets/warner.js +++ /dev/null @@ -1,52 +0,0 @@ -function maybeAddWarning() { - // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE - // in siteinfo.js. - // If either of these are undefined something went horribly wrong, so we abort. - if ( - window.DOCUMENTER_NEWEST === undefined || - window.DOCUMENTER_CURRENT_VERSION === undefined || - window.DOCUMENTER_STABLE === undefined - ) { - return; - } - - // Current version is not a version number, so we can't tell if it's the newest version. Abort. - if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { - return; - } - - // Current version is newest version, so no need to add a warning. - if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { - return; - } - - // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. - if (document.body.querySelector('meta[name="robots"]') === null) { - const meta = document.createElement("meta"); - meta.name = "robots"; - meta.content = "noindex"; - - document.getElementsByTagName("head")[0].appendChild(meta); - } - - const div = document.createElement("div"); - div.classList.add("outdated-warning-overlay"); - const closer = document.createElement("button"); - closer.classList.add("outdated-warning-closer", "delete"); - closer.addEventListener("click", function () { - document.body.removeChild(div); - }); - const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; - div.innerHTML = - 'This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.'; - div.appendChild(closer); - document.body.appendChild(div); -} - -if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", maybeAddWarning); -} else { - maybeAddWarning(); -} diff --git a/previews/PR33/binaries/index.html b/previews/PR33/binaries/index.html deleted file mode 100644 index 57e0825..0000000 --- a/previews/PR33/binaries/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Multi-Star Systems · StarFormationHistories.jl

Multi-Star Systems

StarFormationHistories.AbstractBinaryModelType

StarFormationHistories.AbstractBinaryModel is the abstract supertype for all types that are used to model multi-star systems in the package. All concrete subtypes must implement the StarFormationHistories.sample_system method and the Base.length method, which should return an integer indicating the number of stars per system that can be sampled by the model; this is equivalent to the length of the mass vector returned by sample_system.

source
StarFormationHistories.sample_systemFunction
masses = sample_system(imf, rng::AbstractRNG, binarymodel::StarFormationHistories.AbstractBinaryModel)

Simulates the effects of non-interacting, unresolved stellar companions on stellar photometry. Implementation depends on the choice of binarymodel.

Arguments

  • imf: an object implementing rand(imf) to draw a random mass for a single star or a stellar system (depends on choice of binarymodel)
  • rng::AbstractRNG: the random number generator to use when sampling stars
  • binarymodel::StarFormationHistories.AbstractBinaryModel: an instance of a binary model that determines which implementation will be used; currently provided options are NoBinaries, RandomBinaryPairs, and BinaryMassRatio.

Returns

  • masses::SVector{N,eltype(imf)}: the masses of the individual stars sampled in the system in descending order where N is the maximum number of stars that can be sampled by the provided binarymodel as given by Base.length(binarymodel).
source
StarFormationHistories.RandomBinaryPairsType
RandomBinaryPairs(fraction::Real)

The RandomBinaryPairs type takes one argument 0 <= fraction::Real <= 1 that denotes the number fraction of binaries (e.g., 0.3 for 30% binary fraction) and will sample binaries as random pairs of two stars drawn from the same single-star IMF. This model will ONLY generate up to one additional star – it will not generate any 3+ star systems. This model typically incurs a 10–20% speed penalty relative to NoBinaries.

source
StarFormationHistories.BinaryMassRatioType
BinaryMassRatio(fraction::Real, qdist::Distributions.ContinuousUnivariateDistribution=Distributions.Uniform())

The BinaryMassRatio type takes two arguments; the binary fraction 0 <= fraction::Real <= 1 and a continuous univariate distribution qdist from which to sample binary mass ratios, defined as the ratio of the secondary mass to the primary mass: $q = \text{M}_S / \text{M}_P$. The provided qdist must have the proper support of (minimum(qdist) >= 0) & (maximum(qdist) <= 1); users may find the Distributions.truncated method useful for enforcing this support on more general distributions. The default qdist is a uniform distribution from 0.1 to 1, which appears to give reasonably good agreement to observations (see, e.g., Goodwin 2013).

source
diff --git a/previews/PR33/doc_index/index.html b/previews/PR33/doc_index/index.html deleted file mode 100644 index 3b8b3f3..0000000 --- a/previews/PR33/doc_index/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Index · StarFormationHistories.jl
diff --git a/previews/PR33/examples/index.html b/previews/PR33/examples/index.html deleted file mode 100644 index 8bdb519..0000000 --- a/previews/PR33/examples/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Examples · StarFormationHistories.jl

Examples

We have constructed an example Jupyter notebook that highlights some common use cases supported by the package. It is recommended that you read some of the background in our main documentation before or concurrently with the example. The notebook is available in the repository as examples/fitting1.ipynb and can be viewed in rendered form at this link. It relies on a custom isochrone file which can be made available upon request to the package author.

diff --git a/previews/PR33/fitting/figures/cmd_hess.png b/previews/PR33/fitting/figures/cmd_hess.png deleted file mode 100644 index c95f8d991b1cc140962ecb7531c117dc58943ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155834 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

hO+^X)RB|)iNj^zP$%ULqbkLX!8Sf=#ribd8c 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 z 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

7TfB{)1 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 Rb_+0qABh-BxV0_n%wLUD*n|K8 diff --git a/previews/PR33/fitting/figures/mdf_model.png b/previews/PR33/fitting/figures/mdf_model.png deleted file mode 100644 index f023b364c223811340326520b16d174e8665b021..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39822 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 diff --git a/previews/PR33/fitting/figures/mean_mh.png b/previews/PR33/fitting/figures/mean_mh.png deleted file mode 100644 index f7d4a66b6f604b7857c0908fba0b756dc24cc77b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47757 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

    IKN8Cf7u$q1|;w9wb<(4U+r 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 diff --git a/previews/PR33/fitting/figures/model_cmd.png b/previews/PR33/fitting/figures/model_cmd.png deleted file mode 100644 index 2f1e7fac499a9989d1c0bf30a0c1ff86fe7e57f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50362 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 z%0A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 diff --git a/previews/PR33/fitting/fitting_intro/index.html b/previews/PR33/fitting/fitting_intro/index.html deleted file mode 100644 index bacb09e..0000000 --- a/previews/PR33/fitting/fitting_intro/index.html +++ /dev/null @@ -1,16 +0,0 @@ - -Background and Template Construction · StarFormationHistories.jl

    Background and Template Construction

    Background

    In the classic formulation of star formation history fitting from resolved-star photometry (Dolphin 2002), an observed color-magnitude diagram (CMD) is binned into a 2-D histogram known as a Hess diagram. Such a CMD and Hess diagram pair is shown below.

    Comparison of CMD and a Hess diagram generated from the same observational data.

    The representation of the observations as a Hess diagram allows one to apply Poisson statistics, specifically the Poisson likelihood ratio (Equations 7–10 in Dolphin 2002), to model the observations. As the CMD of a complex stellar population is simply the sum of the CMDs of its sub-populations, one need only prepare a number of templates for each simple stellar population (SSP) which may make up the complex population in question and model the observed Hess diagram as a linear combination of these templates. Keeping the same notation as Dolphin 2002 (Equation 1), the complex model Hess diagram is simply

    \[m_i = \sum_j \, r_j \, c_{i,j}\]

    where $m_i$ is the value of the complex model in bin $i$, $c_{i,j}$ is the value of simple template $j$ in bin $i$, and $r_j$ is the multiplicative coefficient determining how significant template $j$ is to the complex population. In Dolphin 2002, he normalizes the templates to identical star formation rates (SFRs) and so the $r_j$ are SFRs as well. In this package, we prefer to normalize our templates to identical population stellar masses, so our $r_j$ are stellar masses, but the principal is the same.

    Construction of the templates is, however, not a trivial exercise. Ideally, a template constructed to represent a particular SSP would accurately reflect the expectation of how such a population would be observed. Thus, these templates must be adjusted for photometric error, incompleteness, and other effects such as those caused by unresolved binary- and multi-star systems. Observational effects such as photometric error and incompleteness are best measured from artificial star tests (ASTs). It is worth mentioning that ASTs can often return "best case" results, as they typically neglect systematics like uncertainty in the point-spread model used for the photometry; as such it is sometimes necessary to add a systematic error floor to photometric error results from ASTs.

    Such templates can be constructed by sampling many mock stars from an initial mass function (IMF), interpolating their absolute magnitudes from an isochrone of the relevant SSP, and "mock observing" them by applying photometric error and completeness functions (for example, by looking up the $1\sigma$ photometric error and completeness value from a catalog of artificial stars). Such Monte Carlo templates can be slow to construct and exhibit Poisson shot-noise, requiring a statistical data–data comparison rather than a model–data comparison. Thus this method is non-optimal from both a practical and statistical perspective.

    It is better to form what Dolphin 2002 calls a "blurred isochrone;" in this form of template, the SSP isochrone is first interpolated in initial stellar mass to improve the point density along the isochrone. The number of interpolated points is generally a function of the size of the bins in the Hess diagram and the observational error; more points are required as the bin size or photometric errors become smaller. These points are then weighted according to the IMF and the photometric completeness, and this weight is distributed into the Hess diagram following the photometric error distribution determined by similar artificial stars. Dolphin 2002 also mentions interpolating across stellar age/metallicity when constructing such templates; for example, for an SSP with an age of 1 Gyr and a metallicity of [M/H]=-1.0, you could interpolate the isochrones to introduce a Gaussian metallicity spread of 0.05 dex or an age spread of 100 Myr. The general effects of this form of interpolation is to broaden the model templates, particularly features that are very sharp in true SSP models. We neglect this form of interpolation in our implementation as it adds significant complexity and requires users to provide more information about the isochrones that are providing. Such widening of the individual templates is most impactful when photometric errors in the observational data are low (perhaps <0.10 mag).

    Constructing Templates

    While the above description summarizes the necessary components for constructing such a blurred isochrone, it can be a bit difficult to figure out how best to actually construct them. Specifically there are many ways that one could implement the observational effects of photometric error and incompleteness. We provide a method partial_cmd_smooth to construct such templates under the assumption of Gaussian photometric error distributions, which is often a good approximation in the high-completeness regime. This method makes use of user-defined functions for the mean photometric error and completeness as a function of magnitude and filter, such that these can be defined in a number of ways; for example, as direct lookups from a large table of ASTs or as simple function evaluations of analytic approximations or fits to the ASTs.

    This method begins by interpolating the provided SSP isochrone to increase point density. For every such point with $i$ band apparent magnitude $m_i$, it calls a user-defined function to estimate the $1\sigma$ photometric error as $\sigma_i = f_i(m_i)$. The photometric error on the x-axis color for the Hess diagram is estimated from the individual-band $\sigma_i$. These errors are used to define an asymmetric Gaussian kernel for each point in the interpolated isochrone. This kernel describes the shape of the probability distribution for where in the Hess diagram the isochrone point would be observed. However, it also must be normalized (weighted) according to the IMF and observational completeness functions.

    Assume that the vector of initial stellar masses for the points in the interpolated isochrone are $m_i$ and that they are sorted such that $m_i < m_{i+1}$. The IMF weight on point $m_i$ can be approximated as the number fraction of stars born between $m_i$ and $m_{i+1}$ divided by the mean mass per star born $\langle m \rangle$, such that the weight effectively represents the number of stars expected to be born with masses between $m_i$ and $m_{i+1}$ per solar mass of star formation:

    \[\begin{aligned} -w_{i,\text{IMF}} &= \frac{ \int_0^{m_{i+1}} \frac{dN(m)}{dm} dm - \int_0^{m_{i}} \frac{dN(m)}{dm} dm }{\int_0^\infty m \times \frac{dN(m)}{dm} dm} = \frac{ \int_{m_i}^{m_{i+1}} \frac{dN(m)}{dm} dm }{\langle m \rangle} -\end{aligned}\]

    The numerator can either be calculated as the difference in the cumulative distribution function across the bin or approximated efficiently via the trapezoidal rule. The denominator is a function only of the IMF and need only be calculated once. Multiplying this weight by the probability of detection in the relevant bands gives the final weight.

    Below we show a comparison of a smooth Hess diagram template constructed with partial_cmd_smooth with a Monte Carlo realization created with generate_stars_mass and mock-observed with model_cmd. These use an SSP isochrone of age 10 Gyr and metallicity [M/H] of -2 from PARSEC with identical observational error and completeness models. For the provided stellar mass of $10^7 \, \text{M}_\odot$, the Monte Carlo model is fairly well-sampled but still noticably noisy in regions of the Hess diagram that are less well-populated.

    Comparison of smooth Hess diagram template from `partial_cmd_smooth` and a Monte Carlo model made with `generate_stars_mass`.

    StarFormationHistories.partial_cmd_smoothFunction
    result::StatsBase.Histogram = partial_cmd_smooth( m_ini::AbstractVector{<:Number}, mags::AbstractVector{<:AbstractVector{<:Number}}, mag_err_funcs, y_index, color_indices, imf, completeness_funcs=[one for i in mags]; dmod::Number=0, normalize_value::Number=1, mean_mass=mean(imf), edges=nothing, xlim=nothing, ylim=nothing, nbins=nothing, xwidth=nothing, ywidth=nothing )

    Main function for generating template Hess diagrams from a simple stellar population of stars from an isochrone, including photometric error and completeness.

    Arguments

    • m_ini::AbstractVector{<:Number} is a vector containing the initial stellar masses of the stars from the isochrone.
    • mags::AbstractVector{<:AbstractVector{<:Number}} is a vector of vectors. Each constituent vector with index i should have length(mags[i]) == length(m_ini), representing the magnitudes of the isochrone stars in each of the magnitudes considered. In most cases, mags should contain 2 (if y-axis mag is also involved in the x-axis color) or 3 vectors.
    • mag_err_funcs must be an indexable object (e.g., a vector or tuple) that contains callables (e.g., a Function) to compute the 1σ photometric errors in the filters provided in mags. Each callable must take a single argument and return a Number. The length mag_err_funcs must be equal to the length of mags.
    • y_index gives a valid index (e.g., an Int or CartesianIndex) into mags for the filter you want to have on the y-axis of the Hess diagram. For example, if the mags argument contains the B and V band magnitudes as mags=[B, V] and you want V on the y-axis, you would set y_index as 2.
    • color_indices is a length-2 indexable object giving the indices into mags that are to be used to compute the x-axis color. For example, if the mags argument contains the B and V band magnitudes as mags=[B, V], and you want B-V to be the x-axis color, then color_indices should be [1,2] or (1,2) or similar.
    • imf is a callable that takes an initial stellar mass as its sole argument and returns the (properly normalized) probability density of your initial mass function model. All the models from InitialMassFunctions.jl are valid for imf.
    • completeness_functions must be an indexable object (e.g., a vector or tuple) that contains callables (e.g., a Function) to compute the single-filter completeness fractions as a function of magnitude. Each callable in this argument must correspond to the matching filter provided in mags.

    Keyword Arguments

    • dmod::Number=0 distance modulus in magnitudes to apply to the input mags.
    • normalize_value::Number=1 gives the total stellar mass of the population you wish to model.
    • mean_mass::Number gives the expectation value for a random star drawn from your provided imf. This will be computed for you if your provided imf is a valid continuous, univariate Distributions.Distribution object.
    • edges is a tuple of vector-like objects defining the left-side edges of the bins along the x-axis (edges[1]) and the y-axis (edges[2]). Example: (-1.0:0.1:1.5, 22:0.1:27.2). If edges is provided, it overrides the following keyword arguments that offer other ways to specify the extent of the Hess diagram.
    • xlim; a length-2 indexable object (e.g., a vector or tuple) giving the lower and upper bounds on the x-axis corresponding to the provided colors array. Example: [-1.0, 1.5]. This is only used if edges is not provided.
    • ylim; as xlim but for the y-axis corresponding to the provided mags array. Example [25.0, 20.0]. This is only used if edges is not provided.
    • nbins::NTuple{2,<:Integer} is a 2-tuple of integers providing the number of bins to use along the x- and y-axes. This is only used if edges is not provided.
    • xwidth; the bin width along the x-axis for the colors array. This is only used if edges and nbins are not provided. Example: 0.1.
    • ywidth; as xwidth but for the y-axis corresponding to the provided mags array. Example: 0.1.

    Returns

    This method returns the Hess diagram as a StatsBase.Histogram; you should refer to the StatsBase documentation for more information. In short, if the output of this method is result, then the Hess diagram represented as a Matrix is available as result.weights (this is what you would want for fit_templates and similar functions) and the edges of the histogram are available as result.edges.

    source

    We note that in many cases it can also be helpful to add in a foreground/background template that models contamination of the Hess diagram from stars not in your population of interest – this is often done using observations of parallel fields though there are several other possible methods.

    Photometric catalogs can be processed into Hess diagrams meeting our formatting requirements with the method bin_cmd.

    StarFormationHistories.bin_cmdFunction
    result::StatsBase.Histogram =
    -   bin_cmd( colors::AbstractVector{<:Number},
    -            mags::AbstractVector{<:Number};
    -            weights::AbstractVector{<:Number} = ones(promote_type(eltype(colors),
    -                                                     eltype(mags)), size(colors)),
    -            edges  = nothing,
    -            xlim   = extrema(colors),
    -            ylim   = extrema(mags),
    -            nbins  = nothing,
    -            xwidth = nothing,
    -            ywidth = nothing)

    Returns a StatsBase.Histogram type containing the Hess diagram from the provided x-axis photometric colors and y-axis photometric magnitudes mags. These must all be vectors equal in length. You can either specify the bin edges directly via the edges keyword (e.g., edges = (range(-0.5, 1.6, length=100), range(17.0, 26.0, length=100))), or you can set the x- and y-limits via xlim and ylim and the number of bins as nbins, or you can omit nbins and instead pass the bin width in the x and y directions, xwidth and ywidth. See below for more info on the keyword arguments. To plot this with PyPlot you should do plt.imshow(result.weights', origin="lower", ...).

    Keyword Arguments

    • weights::AbstractVector{<:Number} is a array of length equal to colors and mags that contains the probabilistic weights associated with each point. This is passed to StatsBase.fit as StatsBase.Weights(weights).

    The following keyword arguments are passed to StarFormationHistories.calculate_edges to determine the bin edges of the histogram.

    • edges is a tuple of vector-like objects defining the left-side edges of the bins along the x-axis (edges[1]) and the y-axis (edges[2]). Example: (-1.0:0.1:1.5, 22:0.1:27.2). If edges is provided, weights is the only other keyword that will be read; edges supercedes the other construction methods.
    • xlim; a length-2 indexable object (e.g., a vector or tuple) giving the lower and upper bounds on the x-axis corresponding to the provided colors array. Example: [-1.0, 1.5]. This is only used if edges is not provided.
    • ylim; as xlim but for the y-axis corresponding to the provided mags array. Example [25.0, 20.0]. This is only used if edges is not provided.
    • nbins::NTuple{2,<:Integer} is a 2-tuple of integers providing the number of bins to use along the x- and y-axes. This is only used if edges is not provided.
    • xwidth; the bin width along the x-axis for the colors array. This is only used if edges and nbins are not provided. Example: 0.1.
    • ywidth; as xwidth but for the y-axis corresponding to the provided mags array. Example: 0.1.
    source

    A Note on Array Formatting

    It is expected that the user will typically have model templates stored as two-dimensional matrices as these are the obvious choice for representing a binned two-dimensional histogram. We fully support supplying the list of model templates as a list of matrices (e.g., a Vector{Matrix{<:Number}}) to the fitting functions discussed below. The important computational kernels composite! and ∇loglikelihood! have custom loops for these input types.

    However, additional optimizations are possible by flattening the data. By flattening each matrix in the list of model templates into a column vector and concatenating them such that the list of model templates becomes a single matrix, we can compute the complex model Hess diagram as a single matrix-vector product rather than using a custom loop. The same optimization can be made when computing the gradient of the loglikelihood (discussed more below). The majority of all computation for the fitting methods below is spent in these two functions, so optimizing their performance translates directly to improved fitting runtimes. With this flattened memory arrangement we can use the highly optimized LinearAlgbera.mul! method to do the in-place matrix-vector product. This will typically be translated into a call to a BLAS function like gemv!. As such, we can benefit from Julia's ability to switch BLAS implementations at runtime to use Intel's Math Kernel Library, Apple's Accelerate, and others.

    Most of the fitting methods below support both the natural and flattened data layouts. We provide the stack_models method to produce the optimized layout for the list of model templates.

    StarFormationHistories.stack_modelsFunction
    stack_models(models::AbstractVector{<:AbstractMatrix{<:Number}}) = reduce(hcat,map(vec,models))

    Transforms a vector of matrices into a single matrix, with each matrix from models being transcribed into a single column in the output matrix. This data layout enables more efficient calculations in some of our internal functions like composite! and ∇loglikelihood!.

    Examples

    julia> stack_models([rand(5,5) for i in 1:10])
    -25×10 Matrix{Float64}:
    -...
    source

    A Note on Threading

    While generally the methods using BLAS routines offer significant performance improvements, there is a caveat when multithreading from within Julia. By default Julia will allow BLAS to use multiple threads even if Julia itself is started with a single thread (i.e., by running julia -t 1). BLAS threads do not compose with Julia threads. That is, if you start Julia with N>1 threads (julia -t N) and write a threaded workload where each Julia thread is doing BLAS operations concurrently, you can easily oversubscribe the CPU. Specific recommendations vary depending on BLAS vendor (see this page and the linked discourse threads), but generally this package is in the regime of doing many small calculations that do not individually benefit much from BLAS threading (e.g., performance for OpenBLAS with 8 threads is only ~2x the 1 thread performance). As such it is often sufficient to set BLAS to use a single thread (via LinearAlgbera.BLAS.set_num_threads(1) or environment variables; see above link).

    diff --git a/previews/PR33/fitting/fixed_amr/index.html b/previews/PR33/fitting/fixed_amr/index.html deleted file mode 100644 index f402088..0000000 --- a/previews/PR33/fitting/fixed_amr/index.html +++ /dev/null @@ -1,17 +0,0 @@ - -Fixed Age-Metallicity Relations · StarFormationHistories.jl

    Fixed Age-Metallicity Relations

    It is often the case that one may want to fit for star formation rates under a fixed age-metallicity relation or other metallicity evolution model with no degrees of freedom. Such functionality is provided by fixed_amr, which takes as input the relative weights (relweights in the function call, equivalently the $r_{j,k}$ in the above derivation) on each template due to a predetermined metallicity model and fits only the per-age-bin coefficients ($R_j$ in the above derivation).

    StarFormationHistories.fixed_amrFunction
    fixed_amr(models::AbstractVector{T},
    -          data::AbstractMatrix{<:Number},
    -          logAge::AbstractVector{<:Number},
    -          metallicities::AbstractVector{<:Number},
    -          relweights::AbstractVector{<:Number};
    -          relweightsmin::Number=0, 
    -          x0=construct_x0_mdf(logAge, convert(S,13.7)),
    -          kws...) where {S <: Number, T <: AbstractMatrix{S}}
    -fixed_amr(models::AbstractMatrix{S},
    -          data::AbstractVector{<:Number},
    -          logAge::AbstractVector{<:Number},
    -          metallicities::AbstractVector{<:Number},
    -          relweights::AbstractVector{<:Number};
    -          relweightsmin::Number=0,
    -          x0=construct_x0_mdf(logAge, convert(S,13.7)),
    -          kws...) where S <: Number

    Method that fits a linear combination of the provided Hess diagrams models to the observed Hess diagram data, under an externally-imposed age-metallicity relation (AMR) and/or metallicity distribution function (MDF). As such, a number of coefficients equal to length(unique(logAge)) are returned; that is, only one coefficient is derived per unique entry in logAge.

    The second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    Arguments

    • models::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.
    • data::AbstractMatrix{<:Number} is the Hess diagram for the observed data.
    • logAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.
    • metallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This is most commonly a logarithmic abundance like [M/H] or [Fe/H], but you could use a linear abundance like the metal mass fraction Z if you wanted to. There are some notes on the Wikipedia that might be useful.
    • relweights::AbstractVector{<:Number} is a vector of length equal to that of models which contains the relative weights to apply to each model Hess diagram resulting from an externally-imposed age-metallicity relation and/or metallicity distribution function. Additional details on how to create these weights is provided in the notes below and in the online documentation.

    Keyword Arguments

    • relweightsmin truncates the input list of models based on the provided relweights, providing a speedup at the cost of precision by removing models that contribute least to the overall composite model. By default, no truncation of the input is performed and all provided models are used in the fit. We recommend this only be increased when fitting performance begins to impact workflow (e.g., when running massive Monte Carlo experiments). See StarFormationHistories.truncate_relweights for implementation details.
    • x0 is the vector of initial guesses for the stellar mass coefficients per unique entry in logAge. You should basically always be calculating and passing this keyword argument. We provide StarFormationHistories.construct_x0_mdf to prepare x0 assuming constant star formation rate, which is typically a good initial guess.

    Other kws... are passed to Optim.options to set things like convergence criteria for the optimization.

    Notes

    • All metallicity-related weighting of the models is assumed to be captured in the provided relweights vector, which has the same length as the logAge, metallicities, and models vectors. Each entry in relweights is assumed to be a relative weight for the corresponding model. For example, for the model Hess diagram models[i], with log10(age [yr]) = logAge[i] and metallicity metallicities[i], the relative weight due to the model's age and metallicity w(logAge[i], metallicities[i]) is assumed to be relweights[i]. The sum of all relweights for each unique entry in logAge should be 1; i.e., the following condition should be met: all( sum(relweights[logAge .== la]) ≈ 1 for la in unique(logAge)). If this is not the case, this function will issue a warning and attempt to renormalize relweights by mutating the vector in place. More information on preparation of the relweights for input to this method is provided in our online documentation.
    • This function is designed to work best with a "grid" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.
    source
    diff --git a/previews/PR33/fitting/internals/index.html b/previews/PR33/fitting/internals/index.html deleted file mode 100644 index 4219d15..0000000 --- a/previews/PR33/fitting/internals/index.html +++ /dev/null @@ -1,39 +0,0 @@ - -Developer Internals · StarFormationHistories.jl

    Developer Internals

    StarFormationHistories.composite!Function
     composite!(composite::AbstractMatrix{<:Number},
    -            coeffs::AbstractVector{<:Number},
    -            models::AbstractVector{T})
    -            where T <: AbstractMatrix{<:Number}

    Updates the composite matrix in place with the linear combination of sum( coeffs .* models ); this is equation 1 in Dolphin 2002, $m_i = \sum_j \, r_j \, c_{i,j}$.

    Examples

    julia> C = zeros(5,5);
    -julia> models = [rand(size(C)...) for i in 1:5];
    -julia> coeffs = rand(length(models));
    -julia> composite!(C, coeffs, models);
    -julia> C ≈ sum( coeffs .* models)
    -true
    source
    composite!(composite::AbstractVector{<:Number},
    -           coeffs::AbstractVector{<:Number},
    -           models::AbstractMatrix{<:Number})

    Updates the composite vector with the matrix-vector product of models * coeffs. This is equation 1 in Dolphin 2002, $m_i = \sum_j \, r_j \, c_{i,j}$.

    Examples

    julia> hist_size = (5,10);
    -julia> models = reduce(hcat,rand(prod(hist_size)) for i in 1:20);
    -julia> coeffs = rand(length(axes(models,2)));
    -julia> C = zeros(length(axes(models,1)));
    -julia> composite!(C, coeffs, models);
    -julia> C ≈ models * coeffs
    -true

    Notes

    While the other call signature for this function more closely mirrors the natural data structure for Hess diagrams (2D matrices for composite and each entry in models), this method operates on the same data but flattened. Thus composite becomes a vector rather than a matrix and models becomes a single matrix rather than a vector of matrices. The method StarFormationHistories.stack_models is provided to stack the models into this format. This data layout enables us to use the highly optimized LinearAlgebra.mul! function to perform the matrix-vector product which typically achieves >30% speedup relative to the more natural formulation. Additionally, as mul! will typically call to a BLAS matrix-vector product function like gemv! for our use-case, we can switch out Julia's default OpenBLAS at runtime for other BLAS libraries with Julia bindings like MKL and Apple Accelerate, enabling even greater performance improvements.

    source
    StarFormationHistories.loglikelihoodFunction
    loglikelihood(composite::AbstractArray{<:Number}, data::AbstractArray{<:Number})

    Returns the logarithm of the Poisson likelihood ratio given by equation 10 in Dolphin 2002,

    \[\text{ln} \, \mathscr{L} = \sum_i -m_i + n_i \times \left( 1 - \text{ln} \, \left( \frac{n_i}{m_i} \right) \right)\]

    with composite being the complex Hess model diagram $m_i$ (see StarFormationHistories.composite!) and data being the observed Hess diagram $n_i$.

    Performance Notes

    • ~18.57 μs for composite=Matrix{Float64}(undef,99,99) and data=similar(composite).
    • ~20 μs for composite=Matrix{Float64}(undef,99,99) and data=Matrix{Int64}(undef,99,99).
    • ~9.3 μs for composite=Matrix{Float32}(undef,99,99) and data=similar(composite).
    • ~9.6 μs for composite=Matrix{Float32}(undef,99,99) and data=Matrix{Int64}(undef,99,99).
    source
    loglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractVector{T}, data::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}
    -loglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number})

    Returns the logarithm of the Poisson likelihood ratio, but constructs the complex Hess diagram model as sum(coeffs .* models) rather than taking composite directly as an argument. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source
    StarFormationHistories.∇loglikelihoodFunction
    ∇loglikelihood(model::AbstractArray{<:Number}, composite::AbstractArray{<:Number}, data::AbstractArray{<:Number})

    Returns the partial derivative of the logarithm of the Poisson likelihood ratio (StarFormationHistories.loglikelihood) with respect to the coefficient $r_j$ on the provided model. If the complex Hess diagram model is $m_i = \sum_j \, r_j \, c_{i,j}$, then model is $c_{i,j}$, and this function computes the partial derivative of $\text{log} \, \mathscr{L}$ with respect to the coefficient $r_j$. This is given by equation 21 in Dolphin 2002,

    \[\frac{\partial \, \text{log} \, \mathscr{L}}{\partial \, r_j} = \sum_i c_{i,j} \left( \frac{n_i}{m_i} - 1 \right)\]

    where $n_i$ is bin $i$ of the observed Hess diagram data.

    Performance Notes

    • ~4.1 μs for model, composite, data all being Matrix{Float64}(undef,99,99).
    • ~1.3 μs for model, composite, data all being Matrix{Float32}(undef,99,99).
    source
    ∇loglikelihood(models::AbstractVector{T}, composite::AbstractMatrix{<:Number}, data::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}
    -∇loglikelihood(models::AbstractMatrix{<:Number}, composite::AbstractVector{<:Number}, data::AbstractVector{<:Number})

    Computes the gradient of the logarithm of the Poisson likelihood ratio with respect to the coefficients by calling the single-model ∇loglikelihood for every model in models. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source
    ∇loglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractVector{T}, data::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}
    -∇loglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number})

    Forms the composite matrix from coefficients coeffs and model templates models and returns the gradient of the loglikelihood with respect to the coefficients. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source
    StarFormationHistories.∇loglikelihood!Function
     ∇loglikelihood!(G::AbstractVector, composite::AbstractMatrix{<:Number}, models::AbstractVector{S}, data::AbstractMatrix{<:Number}) where S <: AbstractMatrix{<:Number}

    Efficiently computes the gradient of StarFormationHistories.loglikelihood with respect to all coefficients by updating G with the gradient. This will overwrite composite with the result of 1 .- (data ./ composite) so it shouldn't be reused after being passed to this function.

    Arguments

    • G::AbstractVector is the vector that will be mutated in-place with the computed gradient values.
    • models::AbstractVector{<:AbstractMatrix{<:Number}} is the vector of matrices giving the model Hess diagrams.
    • composite::AbstractMatrix{<:Number} is a matrix that contains the composite model sum(coeffs .* models).
    • data::AbstractMatrix{<:Number} contains the observed Hess diagram that is being fit.
    source
    G = ∇loglikelihood!(G::AbstractVector, composite::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number})

    Updates and returns G with the gradient of the loglikelihood with respect to all coefficients. This call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source
    StarFormationHistories.fg!Function
    -logL = fg!(F, G, coeffs::AbstractVector{<:Number}, models::AbstractVector{T}, data::AbstractMatrix{<:Number}, composite::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}
    --logL = fg!(F, G, coeffs::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number}, composite::AbstractVector{<:Number})

    Computes -loglikelihood and its gradient simultaneously for use with Optim.jl and other optimization APIs. See documentation here. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source
    StarFormationHistories.truncate_relweightsFunction
    keep_idx::Vector{Int} = truncate_relweights(relweightsmin::Number, relweights::AbstractVector{<:Number}, logAge::AbstractVector{<:Number})

    Method to truncate an isochrone grid with log10(age [yr]) values logAge and relative weights relweights due to an age-metallicity relation to only include models with relweights greater than relweightsmin times the maximum relative weight for each unique entry in logAge. The input vectors are the same as those for StarFormationHistories.fixed_amr, which includes more information. Returns a vector of the indices into relweights and logAge of the isochrone models whose relative weights are significant given the provided relweightsmin.

    Examples

    When using a fixed input age-metallicity relation as enabled by, for example, StarFormationHistories.fixed_amr, only the star formation rate (or total stellar mass) coefficients need to be fit, as the metallicity distribution is no longer a free parameter in the model. As such, the relative weights of each model with identical logAge but different metallicities only need to be computed once at the start of the optimization. As the metallicity distribution is not a free parameter, it is also possible to truncate the list of models to only those that contribute significantly to the final composite model to improve runtime performance. That is what this method does.

    A simple isochrone grid will be two-dimensional, encompassing age and metallicity. Consider a subset of the model grid with the same age such that unique(logAge) = [10.0] but a series of different metallicities, metallicities = -2.5:0.25:0. If we model the metallicity distribution function for this age as having a mean [M/H] of -2.0 and a Gaussian spread of 0.2 dex, then the relative weights of these models can be approximated as

    import Distributions: Normal, pdf
    -metallicities = -2.5:0.25:0
    -relweights = pdf.(Normal(-2.0, 0.2), metallicities)
    -relweights ./= sum(relweights) # Normalize the relative weights to unity sum
    11-element Vector{Float64}:
    - 0.021919934465195145
    - 0.2284109622221623
    - 0.4988954088848224
    - 0.2284109622221623
    - 0.021919934465195145
    - 0.0004409368867815243
    - 1.8592101580561089e-6
    - 1.6432188478108614e-9
    - 3.0442281937632026e-13
    - 1.1821534989089337e-17
    - 9.622444440364979e-23

    Several of these models with very low relative weights are unlikely to contribute significantly to the final composite model. We can select out only the significant ones with, say, relative weights greater than 10% of the maximum as StarFormationHistories.truncate_relweights(0.1, relweights, fill(10.0,length(metallicities))) which will return indices into relweights whose values are greater than 0.1 * maximum(relweights) = 0.04988954088848224,

    3-element Vector{Int64}:
    - 2
    - 3
    - 4

    which correspond to relweights[2,3,4] = [ 0.2284109622221623, 0.4988954088848224, 0.2284109622221623 ]. If we use only these 3 templates in the fit, instead of the original 11, we will achieve a speedup of almost 4x with a minor loss in precision which, in most cases, will be less than the numerical uncertainties on the individual star formation rate parameters. However, as fits of these sort are naturally quite fast, we recommend use of this type of truncation only in applications where many fits are required (e.g., Monte Carlo experiments). For most applications, this level of optimization is not necessary.

    source
    StarFormationHistories.calculate_edgesFunction
    calculate_edges(edges, xlim, ylim, nbins, xwidth, ywidth)

    Function to calculate the bin edges for 2D histograms. Returns (xbins, ybins) with both entries being ranges.

    Keyword Arguments

    • edges is a tuple of vectors-like objects defining the left-side edges of the bins along the x-axis (edges[1]) and the y-axis (edges[2]). Example: (-1.0:0.1:1.5, 22:0.1:27.2). If edges is provided, it will simply be returned.
    • xlim; a length-2 indexable object (e.g., a Vector{Float64} or NTuple{2,Float64)) giving the lower and upper bounds on the x-axis corresponding to the provided colors array. Example: [-1.0, 1.5]. This is only used if edges==nothing.
    • ylim; as xlim but for the y-axis corresponding to the provided mags array. Example [25, 20]. This is only used if edges==nothing.
    • nbins::NTuple{2,<:Integer} is a 2-tuple of integers providing the number of bins to use along the x- and y-axes. This is only used if edges==nothing.
    • xwidth; the bin width along the x-axis for the colors array. This is only used if edges==nothing and nbins==nothing. Example: 0.1.
    • ywidth; as xwidth but for the y-axis corresponding to the provided mags array. Example: 0.1.
    source
    diff --git a/previews/PR33/fitting/linear_amr/index.html b/previews/PR33/fitting/linear_amr/index.html deleted file mode 100644 index ae1d438..0000000 --- a/previews/PR33/fitting/linear_amr/index.html +++ /dev/null @@ -1,96 +0,0 @@ - -Linear Age-Metallicity Relation · StarFormationHistories.jl

    Linear Age-Metallicity Relation

    Why Should Metallicity Evolutions Be Constrained?

    While the above methods work well for optimizing the per-template $r_j$ as a means for fitting SFHs, these methods can produce metallicity evolutions that could be considered unphysical, with large changes in the mean metallicity over small changes in time. An example of this type of behavior is shown in the SFH fit below.

    Example of a SFH fit with variations in the metallicity evolution.

    While some metallicity variation in the star-forming gas is to be expected, these variations in the SFH fit can end up being quite large depending on the data and isochrone grid adopted. A solution is to construct a more physically-motivated model.

    We can do this using a hierarchical model with a parameterized metallicity distribution function (MDF) where the the $r_j$ are not the parameters directly optimized. Rather, we can optimize one stellar mass (or star formation rate) parameter per age bin, and then a number of MDF parameters that determine how that stellar mass is split between models with different metallicities at fixed age. An example for one such MDF model is a linear mean metallicity relation $\langle [\text{M}/\text{H}] \rangle (t) = \alpha \, \left( T_\text{max} - t \right) + \beta$ with a Gaussian distribution in metallicity at fixed age. $T_\text{max}$ here is the earliest lookback time under consideration such that $\langle [\text{M}/\text{H}] \rangle (T_\text{max}) = \beta$. If the per-age-bin stellar mass coefficients are $R_j$, the age of the stellar population $j$ is $t_j$, and the metallicity of population $k$ is $[\text{M}/\text{H}]_k$, then we can write the per-model $r_{j,k}$ (where we are now using separate indices for age and metallicity) as

    \[\begin{aligned} -\mu_j &= \alpha \, \left( T_\text{max} - t_j \right) + \beta \\ -r_{j,k} &= R_j \, \frac{ \text{exp} \left( - \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right)}{\sum_k \text{exp} \left( - \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right)} -\end{aligned}\]

    where the numerator is the MDF at fixed age evaluated at metallicity $[\text{M}/\text{H}]_k$ and the denominator is a normalizing coefficient that ensures $\sum_k r_{j,k} = R_j$. In this notation, bin $i$ of the complex model Hess diagram (equation 1 of Dolphin 2002) is

    \[m_i = \sum_{j,k} \, r_{j,k} \; c_{i,j,k}\]

    Below we show a fit using this hierarchical model to the same data as above.

    Example of a SFH fit with a linear metallicity evolution.

    Fitting Functions

    We provide the method StarFormationHistories.fit_templates_mdf to fit this model to an observed Hess diagram.

    StarFormationHistories.fit_templates_mdfFunction
    fit_templates_mdf(models::AbstractVector{<:AbstractMatrix{S}},
    -                  data::AbstractMatrix{<:Number},
    -                  logAge::AbstractVector{<:Number},
    -                  metallicities::AbstractVector{<:Number},
    -                  T_max::Number
    -                  [, σ::Number];
    -                  x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),
    -                            [0.05, -2.0, 0.2]),
    -                  kws...) where {S <: Number}
    -fit_templates_mdf(models::AbstractMatrix{S},
    -                  data::AbstractVector{<:Number},
    -                  logAge::AbstractVector{<:Number},
    -                  metallicities::AbstractVector{<:Number},
    -                  T_max::Number
    -                  [, σ::Number];
    -                  x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),
    -                            [0.05, -2.0, 0.2]),
    -                  kws...) where {S <: Number}

    Method that fits a linear combination of the provided Hess diagrams models to the observed Hess diagram data, constrained to have a linear age-metallicity relation with the mean metallicity of element i of unique(logAge) being μ[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. α is therefore a slope in the units of metallicities per Gyr, and β is the mean metallicity value of stars being born at a lookback time of T_max, which has units of Gyr. Individual weights for each isochrone template are then determined via Gaussian weighting with the above mean and the standard deviation σ, which can either be fixed or fit.

    This function is designed to work best with a "grid" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.

    The second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    Arguments

    • models are the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.
    • data is the Hess diagram for the observed data.
    • logAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.
    • metallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This is most commonly a logarithmic abundance like [M/H] or [Fe/H], but you could use a linear abundance like the metal mass fraction Z if you wanted to. There are some notes on the Wikipedia that might be useful.
    • T_max::Number is the time at which the age-metallicity relation has a value of eta in Gyr. For example, if the oldest stellar populations in your isochrone grid are 12 Gyr old, you could set T_max = 12.0.

    Optional Arguments

    • If provided, σ::Number is the fixed width of the Gaussian the defines the metallicity distribution function (MDF) at fixed logAge. If this argument is omitted, σ will be a free parameter in the fit.

    Keyword Arguments

    • x0 is the vector of initial guesses for the stellar mass coefficients per unique entry in logAge, plus the variables that define the metallicity evolution model. You should basically always be calculating and passing this keyword argument. We provide StarFormationHistories.construct_x0_mdf to prepare the first part of x0 assuming constant star formation rate, which is typically a good initial guess. You then have to concatenate that result with an initial guess for the metallicity evolution parameters. For example, x0=vcat(construct_x0_mdf(logAge, 13.7; normalize_value=1e4), [0.05,-2.0,0.2]), where logAge is a valid argument for this function (see above), and the initial guesses on the parameters are [α, β, σ] = [0.05, -2.0, 0.2]. If the provided metallicities are, for example, [M/H] values, then this mean metallicity evolution is μ(t) [dex] = 0.05 [dex/Gyr] * (T_max - t) [Gyr] - 2.0 [dex], and at fixed time, the metallicity distribution function is Gaussian with mean μ(t) and standard deviation σ. If you provide σ as an optional argument, then you should not include an entry for it in x0.
    • Other kws... are passed to Optim.options to set things like convergence criteria for the optimization.

    Returns

    • This function returns an object (say, result) of similar structure to the object returned by fit_templates. Specifically, this method will return a NamedTuple with entries result.mle and result.map for the maximum likelihood and maximum a posteriori estimates, respectively. If you provide a fixed σ, those objects will be instances of StarFormationHistories.LogTransformMDFσResult. If you allow σ to be freely fit, those objects will be instances of StarFormationHistories.LogTransformMDFResult. Both of these types support sampling via, e.g., rand(result.map, 10).

    Notes

    • α and σ are optimized under a logarithmic transformation, so they are constrained to be positive. β is not and may be negative. This method also uses the BFGS method from Optim.jl internally just like fit_templates; please see the notes section of that method.
    source
    StarFormationHistories.LogTransformMDFσResultType
    LogTransformMDFσResult(μ::AbstractVector{<:Number},
    -                       σ::AbstractVector{<:Number},
    -                       invH::AbstractMatrix{<:Number},
    -                       result)

    Type for containing the maximum likelihood estimate (MLE) and maximum a posteriori (MAP) results from fit_templates_mdf for fixed σ. The fitted coefficients are available in the μ field. Estimates of the standard errors are available in the σ field. These have both been transformed from the native logarithmic fitting space into natural units (i.e., stellar mass or star formation rate). The linear age-metallicity relation parameters α (slope [dex/Gyr]) and β (intercept at T_max [dex]) are available in the second-to-last and last elements of μ and σ, respectively.

    invH contains the estimated inverse Hessian of the likelihood / posterior at the maximum point in the logarithmic fitting units. result is the full result object returned by the optimization routine.

    This type is implemented as a subtype of Distributions.Sampleable{Multivariate, Continuous} to enable sampling from an estimate of the likelihood / posterior distribution. We approximate the distribution as a multivariate Gaussian in the native (logarithmically transformed) fitting variables with covariance matrix invH and means log.(μ). We find this approximation is good for the MAP result but less robust for the MLE. You can obtain N::Integer samples from the distribution by rand(R, N) where R is an instance of this type; this will return a size (length(μ)+2) x N matrix, or fail if invH is not positive definite.

    Examples

    julia> result = fit_templates_mdf(models, data, model_logAge, model_MH, 0.3);
    -
    -julia> typeof(result.map)
    -StarFormationHistories.LogTransformMDFσResult{...}
    -
    -julia> size(rand(result.map, 3)) == (length(models)+2,3)
    -true
    source
    StarFormationHistories.LogTransformMDFResultType
    LogTransformMDFResult(μ::AbstractVector{<:Number},
    -                      σ::AbstractVector{<:Number},
    -                      invH::AbstractMatrix{<:Number},
    -                      result)

    Type for containing the maximum likelihood estimate (MLE) and maximum a posteriori (MAP) results from fit_templates_mdf when freely fitting σ. The fitted coefficients are available in the μ field. Estimates of the standard errors are available in the σ field. These have both been transformed from the native logarithmic fitting space into natural units (i.e., stellar mass or star formation rate). The linear age-metallicity relation parameters α (slope [dex/Gyr]) and β (intercept at T_max [dex]) are available in the third-to-last and second-to-last elements of μ and σ, respectively. The static Gaussian width of the MDF at fixed age is provided in the last element of μ and σ.

    invH contains the estimated inverse Hessian of the likelihood / posterior at the maximum point in the logarithmic fitting units. result is the full result object returned by the optimization routine.

    This type is implemented as a subtype of Distributions.Sampleable{Multivariate, Continuous} to enable sampling from an estimate of the likelihood / posterior distribution. We approximate the distribution as a multivariate Gaussian in the native (logarithmically transformed) fitting variables with covariance matrix invH and means log.(μ). We find this approximation is good for the MAP result but less robust for the MLE. You can obtain N::Integer samples from the distribution by rand(R, N) where R is an instance of this type; this will return a size (length(μ)+3) x N matrix, or fail if invH is not positive definite.

    Examples

    julia> result = fit_templates_mdf(models, data, model_logAge, model_MH);
    -
    -julia> typeof(result.map)
    -StarFormationHistories.LogTransformMDFσResult{...}
    -
    -julia> size(rand(result.map, 3)) == (length(models)+3,3)
    -true
    source

    The method StarFormationHistories.construct_x0_mdf can be used to construct the stellar mass components $R_j$ of the initial guess vector x0

    StarFormationHistories.construct_x0_mdfFunction
    x0::Vector = construct_x0_mdf(logAge::AbstractVector{T},
    -                              T_max::Number;
    -                              normalize_value::Number = one(T)) where T <: Number

    Generates a vector of initial stellar mass normalizations for input to StarFormationHistories.fit_templates_mdf or StarFormationHistories.hmc_sample_mdf with a total stellar mass of normalize_value such that the implied star formation rate is constant across the provided logAge vector that contains the log10(Age [yr]) of each isochrone that you are going to input as models. For the purposes of computing the constant star formation rate, the provided logAge are treated as left-bin edges, with the final right-bin edge being T_max, which has units of Gyr. For example, you might have logAge=[6.6, 6.7, 6.8] in which case a final logAge of 6.9 would give equal bin widths. In this case you would set T_max = exp10(6.9) / 1e9 ≈ 0.0079 so that the width of the final bin for the star formation rate calculation has the same log10(Age [yr]) step as the other bins.

    The difference between this function and StarFormationHistories.construct_x0 is that this function generates an x0 vector that is of length length(unique(logage)) (that is, a single normalization factor for each unique entry in logAge) while StarFormationHistories.construct_x0 returns an x0 vector that is of length length(logAge); that is, a normalization factor for every entry in logAge. The order of the coefficients is such that the coefficient x[i] corresponds to the entry unique(logAge)[i].

    Notes

    Examples

    julia> construct_x0_mdf([9.0,8.0,7.0], 10.0; normalize_value=5.0)
    -3-element Vector{Float64}:
    - 4.504504504504504
    - 0.4504504504504504
    - 0.04504504504504504
    -
    -julia> construct_x0_mdf(repeat([9.0,8.0,7.0,8.0];inner=3), 10.0; normalize_value=5.0)
    -3-element Vector{Float64}:
    - 4.504504504504504
    - 0.4504504504504504
    - 0.04504504504504504
    -
    -julia> construct_x0_mdf(repeat([9.0,8.0,7.0,8.0],3), 10.0; normalize_value=5.0) ≈ construct_x0([9.0,8.0,7.0], 10.0; normalize_value=5.0)
    -true
    source

    and StarFormationHistories.calculate_coeffs_mdf can be used to calculate per-template stellar mass coefficients (the $r_{j,k}$ above) given the results of a fit (which will be the $R_j$ in the equations above)

    StarFormationHistories.calculate_coeffs_mdfFunction
    calculate_coeffs_mdf(variables::AbstractVector{<:Number},
    -                     logAge::AbstractVector{<:Number},
    -                     metallicities::AbstractVector{<:Number},
    -                     T_max::Number
    -                     α::Number,
    -                     β::Number,
    -                     σ::Number,)
    -calculate_coeffs_mdf(variables::AbstractVector{<:Number},
    -                     logAge::AbstractVector{<:Number},
    -                     metallicities::AbstractVector{<:Number},
    -                     T_max::Number)

    Calculates per-model stellar mass coefficients coeffs from the fitting parameters of StarFormationHistories.fit_templates_mdf and StarFormationHistories.hmc_sample_mdf. The variables returned by these functions is of length length(unique(logAge))+3. The first length(logAge) entries are stellar mass coefficients, one per unique entry in logAge. The final three elements are α, β, and σ defining a metallicity evolution such that the mean for element i of unique(logAge) is μ[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. The individual weights per each isochrone are then determined via Gaussian weighting with the above mean and the provided σ. The second call signature can be used on samples that include α, β, and σ.

    Examples

    julia> calculate_coeffs_mdf([1,1], [7,7,8,8], [-2,-1,-2,-1], 12, 0.05, -2.0, 0.2) ≈ [ 0.07673913563377144, 0.9232608643662287, 0.08509904500701986, 0.9149009549929802 ]
    -true
    source

    Sampling Methods

    We additionally offer a sampling method for this linear age-metallicity relation using HMC:

    StarFormationHistories.hmc_sample_mdfFunction
    hmc_sample_mdf(models::AbstractVector{T},
    -               data::AbstractMatrix{<:Number},
    -               logAge::AbstractVector{<:Number},
    -               metallicities::AbstractVector{<:Number},
    -               T_max::Number,
    -               nsteps::Integer;
    -               composite=Matrix{S}(undef,size(data)),
    -               rng::Random.AbstractRNG=Random.default_rng(),
    -               kws...) where {S <: Number, T <: AbstractMatrix{S}}

    Method to sample the posterior of the star formation history coefficients constrained to have a linear age-metallicity relation with the mean metallicity of element i of unique(logAge) being μ[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. α is therefore a slope in the units of metallicities per Gyr, and β is the mean metallicity value of stars born at lookback time T_max which has units of Gyr. Individual weights for each isochrone template are then determined via Gaussian weighting with the above mean and the standard deviation σ, which can either be fixed or fit. This method is essentially an analog of StarFormationHistories.fit_templates_mdf that samples the posterior rather than using optimization methods to find the maximum likelihood estimate. This method uses the No-U-Turn sampler as implemented in DynamicHMC.jl, which is a form of dynamic Hamiltonian Monte Carlo.

    This function is designed to work best with a "grid" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.

    Arguments

    • models::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.
    • data::AbstractMatrix{<:Number} is the Hess diagram for the observed data.
    • logAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.
    • metallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This is most commonly a logarithmic abundance like [M/H] or [Fe/H], but you could use a linear abundance like the metal mass fraction Z if you wanted to. There are some notes on the Wikipedia that might be useful.
    • T_max::Number is the time at which the age-metallicity relation has a value of eta in Gyr. For example, if the oldest stellar populations in your isochrone grid are 12 Gyr old, you could set T_max = 12.0.
    • nsteps::Integer is the number of samples to draw per chain.

    Optional Arguments (NOT YET IMPLEMENTED)

    • nchains::Integer: If this argument is not provided, this method will return a single chain. If this argument is provided, it will sample nchains chains using all available threads and will return a vector of the individual chains. If nchains is set, composite must be a vector of matrices containing a working matrix for each chain.

    Keyword Arguments

    • composite is the working matrix (or vector of matrices, if the argument nchains is provided) that will be used to store the composite Hess diagram model during computation; must be of the same size as the templates contained in models and the observed Hess diagram data.
    • rng::Random.AbstractRNG is the random number generator that will be passed to DynamicHMC.jl. If nchains is provided this method will attempt to sample in parallel, requiring a thread-safe rng such as that provided by Random.default_rng().

    All other keyword arguments kws... will be passed to DynamicHMC.mcmc_with_warmup or DynamicHMC.mcmc_keep_warmup depending on whether nchains is provided.

    Returns (NEEDS UPDATED)

    • If nchains is not provided, returns a NamedTuple as summarized in DynamicHMC.jl's documentation. In short, the matrix of samples can be extracted and transformed as exp.( result.posterior_matrix ). Statistics about the chain can be obtained with DynamicHMC.Diagnostics.summarize_tree_statistics(result.tree_statistics); you want to see a fairly high acceptance rate (>0.5) and the majority of samples having termination criteria being "turning." See DynamicHMC.jl's documentation for more information.
    • If nchains is provided, returns a vector of length nchains of the same NamedTuples described above. The samples from each chain in the returned vector can be stacked to a single (nsamples, nchains, length(models)) matrix with DynamicHMC.stack_posterior_matrices(result).
    source

    Implementation

    While one could optimize the above model without an analytic gradient, such gradient-free methods are typically slower and less robust. One could also calculate the gradient numerically using finite differences or auto-differentiation, but these are still slower than analytic calculations. We will show that the gradient of this hierarchical model is analytic, allowing us to design an efficient optimization scheme.

    Equation 21 in Dolphin 2001 gives the gradient of our objective function with respect to the underlying coefficients

    \[\begin{aligned} -F \equiv - \text{ln} \, \mathscr{L} &= \sum_i m_i - n_i \times \left( 1 - \text{ln} \, \left( \frac{n_i}{m_i} \right) \right) \\ -\frac{\partial \, F}{\partial \, r_{j,k}} &= \sum_i c_{i,j,k} \left( 1 - \frac{n_i}{m_i} \right) -\end{aligned}\]

    where $c_{i,j,k}$ is the value of template $j,k$ in bin $i$ and $n_i$ is bin $i$ of the observed Hess diagram. These partial derivatives are easy to obtain, but we need partials with respect to the per-age-bin fitting parameters $R_j$. Given the above relation between $r_{j,k}$ and $R_j$, we can calculate these derivatives as

    \[\begin{aligned} -\frac{\partial \, F}{\partial \, R_j} &= \sum_k \, \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{\partial \, r_{j,k}}{\partial \, R_j} \\ -\frac{\partial \, r_{j,k}}{\partial \, R_j} &= \frac{ \text{exp} \left( - \frac{1}{2} \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right)}{\sum_k \text{exp} \left( - \frac{1}{2} \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right)} = \frac{r_{j,k}}{R_j} -\end{aligned}\]

    Then we need only the partial derivatives of the objective function $F$ with respect to the MDF parameters, which in this case are $\alpha, \beta, \sigma$. For convenience we will rewrite

    \[r_{j,k} = R_j \, \frac{ \text{exp} \left( - \frac{1}{2} \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right)}{\sum_k \text{exp} \left( - \frac{1}{2} \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right)} = R_j \, \frac{A_{j,k}}{\sum_k A_{j,k}}\]

    as many different types of models can be expressed via this simplified notation by substituting the $A_{j,k}$ with different distributions. This allows us to write

    \[\begin{aligned} -\frac{\partial \, F}{\partial \, \beta} &= \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{\partial \, r_{j,k}}{\partial \, \beta} \\ -\frac{\partial \, r_{j,k}}{\partial \, \beta} &= R_j \left( \frac{1}{\sum_k \, A_{j,k}} \, \frac{\partial \, A_{j,k}}{\partial \, \beta} - \frac{A_{j,k}}{\left( \sum_k \, A_{j,k} \right)^2} \, \frac{\partial \, \sum_k \, A_{j,k}}{\partial \, \beta} \right) \\ -&= \frac{R_j}{\sum_k \, A_{j,k}} \left( \frac{\partial \, A_{j,k}}{\partial \, \beta} - \frac{A_{j,k}}{\sum_k \, A_{j,k}} \sum_k \frac{\partial \, A_{j,k}}{\partial \, \beta} \right) \\ -\end{aligned}\]

    Given our specific definition of $A_{j,k}$ being a Gaussian distribution, we have

    \[\begin{aligned} -\mu_j &= \alpha \, \left( T_\text{max} - t_j \right) + \beta \\ -\frac{\partial \, A_{j,k}}{\partial \, \beta} &= \frac{\partial}{\partial \, \beta} \, \left[ \text{exp} \left( - \frac{1}{2} \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right) \right] \\ -&= \frac{A_{j,k}}{\sigma^2} \left( [\text{M}/\text{H}]_k - \mu_j \right) -\end{aligned}\]

    We can now substitute this result into the above expressions to write

    \[\begin{aligned} -\frac{\partial \, F}{\partial \, \beta} &= \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{\partial \, r_{j,k}}{\partial \, \beta} \\ -&= \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{R_j}{\sum_k \, A_{j,k}} \left( \frac{\partial \, A_{j,k}}{\partial \, \beta} - \frac{A_{j,k}}{\sum_k \, A_{j,k}} \sum_k \frac{\partial \, A_{j,k}}{\partial \, \beta} \right) \\ -&= \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{R_j}{\sigma^2 \, \sum_k \, A_{j,k}} \left( A_{j,k} \left( [\text{M}/\text{H}]_k - \mu_j \right) - \frac{A_{j,k}}{\sum_k \, A_{j,k}} \sum_k A_{j,k} \left( [\text{M}/\text{H}]_k - \mu_j \right) \right) -\end{aligned}\]

    It can be shown that the partial derivative of $F$ with respect to $\alpha$ is simply

    \[\frac{\partial \, F}{\partial \, \alpha} = \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{\partial \, r_{j,k}}{\partial \, \alpha} = \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{\partial \, r_{j,k}}{\partial \, \beta} \times \left( T_\text{max} - t_j \right) \\\]

    The partial derivative with respect to $\sigma$ is slightly more complicated, but we can start identically to how we started above when deriving $\frac{\partial \, F}{\partial \, \beta}$ with

    \[\begin{aligned} -\frac{\partial \, F}{\partial \, \sigma} &= \sum_{j,k} \frac{\partial \, F}{\partial \, r_{j,k}} \, \frac{\partial \, r_{j,k}}{\partial \, \sigma} \\ -\frac{\partial \, r_{j,k}}{\partial \, \sigma} &= R_j \left( \frac{1}{\sum_k \, A_{j,k}} \, \frac{\partial \, A_{j,k}}{\partial \, \sigma} - \frac{A_{j,k}}{\left( \sum_k \, A_{j,k} \right)^2} \, \frac{\partial \, \sum_k \, A_{j,k}}{\partial \, \sigma} \right) \\ -&= \frac{R_j}{\sum_k \, A_{j,k}} \left( \frac{\partial \, A_{j,k}}{\partial \, \sigma} - \frac{A_{j,k}}{\sum_k \, A_{j,k}} \sum_k \frac{\partial \, A_{j,k}}{\partial \, \sigma} \right) \\ -\end{aligned}\]

    Then all we need is

    \[\frac{\partial \, A_{j,k}}{\partial \, \sigma} = \frac{A_{j,k} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)^2}{\sigma^3}\]

    which we can substitute into the above expressions to find $\frac{\partial \, F}{\partial \, \sigma}$.

    diff --git a/previews/PR33/fitting/log_amr/index.html b/previews/PR33/fitting/log_amr/index.html deleted file mode 100644 index 1ad57f6..0000000 --- a/previews/PR33/fitting/log_amr/index.html +++ /dev/null @@ -1,85 +0,0 @@ - -Logarithmic Age-Metallicity Relation · StarFormationHistories.jl

    Logarithmic Age-Metallicity Relation

    Definition

    This model differs from the linear age-metallicity relation (AMR) in its definition of the mean metallicity at lookback time $t$. In the linear model, we defined the mean metallicity as $\langle [\text{M}/\text{H}] \rangle (t) = \alpha \, \left( T_\text{max} - t_j \right) + \beta$, whereas in this model we define the metal mass fraction $Z$ to be linear with lookback time, such that [M/H] scales logarithmically with lookback time,

    \[\begin{aligned} -\langle Z \rangle (t) &= \alpha \, \left( T_\text{max} - t \right) + \beta \\ -\langle [\text{M}/\text{H}]\rangle (t) &\equiv \text{log} \left( \frac{\langle Z \rangle \left(t\right)}{X} \right) - \text{log} \left( \frac{Z_\odot}{X_\odot} \right) -\end{aligned}\]

    with $T_\text{max}$ being the earliest lookback time under consideration, such that $\langle Z \rangle (T_\text{max}) = \beta$. We choose this parameterization so that positive $\alpha$ and $\beta$ result in an age-metallicity relation that is monotonically increasing with decreasing lookback time $t$. We model the spread in metallicities at fixed $t$ as Gaussian in [M/H], identically to how it is modelled in the linear AMR case. This implies the spread is asymmetric in $Z$; this can be seen in the output of examples/log_amr/log_amr_example.jl, shown below, which illustrates the relative weights due to a logarithmic AMR across a grid of ages and metallicities. The per-model coefficients implied by a such a logarithmic AMR can be calculated with calculate_coeffs_logamr.

    Visualization of the relative weights across a grid of logAge and metallicity under a logarithmic age-metallicity relation.

    StarFormationHistories.calculate_coeffs_logamrFunction
    calculate_coeffs_logamr(variables::AbstractVector{<:Number},
    -                        logAge::AbstractVector{<:Number},
    -                        metallicities::AbstractVector{<:Number},
    -                        T_max::Number
    -                        [, α::Number, β::Number, σ::Number];
    -                        MH_func = StarFormationHistories.MH_from_Z)

    Calculates per-model stellar mass coefficients coeffs from the fitting parameters of StarFormationHistories.fit_templates_logamr and StarFormationHistories.hmc_sample_logamr. The variables returned by these functions is of length length(unique(logAge))+3. The first length(logAge) entries are stellar mass coefficients, one per unique entry in logAge. The final three elements are α, β, and σ defining a metallicity evolution such that the mean metal mass fraction Z for element i of unique(logAge) is μ_Z[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. This is converted to a mean metallicity in [M/H] via the provided callable keyword argument MH_func which defaults to StarFormationHistories.MH_from_Z. The individual weights per each isochrone are then determined via Gaussian weighting with the above mean [M/H] and the provided σ in dex. The provided metallicities vector should be in [M/H].

    Notes

    • Physically, the metal mass fraction Z must always be positive. Under the above model, this means α and β must be greater than or equal to 0. With σ being a Gaussian width, it must be positive.
    • If T_max is lower than the maximum of the logAge argument you provide, a warning will be raised which may be ignored if it does not result in any of the mean metal mass fractions Z being less than 0 for any of the provided logAge.
    • An error will be thrown if the provided age-metallicity relation variables (α, β) and T_max argument result in a mean metal mass fraction less than 0 for any time in the provided logAge vector.
    source

    Fitting Functions

    The main function we provide to fit star formation histories to Hess diagrams under the logarithmic age-metallicity relation is fit_templates_logamr. This function operates similarly to the fitting function for the linear AMR model, fit_templates_mdf.

    StarFormationHistories.fit_templates_logamrFunction
    result = fit_templates_logamr(models::AbstractVector{<:AbstractMatrix{S}},
    -                              data::AbstractMatrix{<:Number},
    -                              logAge::AbstractVector{<:Number},
    -                              metallicities::AbstractVector{<:Number},
    -                              T_max::Number
    -                              [, σ::Number];
    -                              x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),
    -                                        [1e-4, 5e-5, 0.2]),
    -                              MH_func = StarFormationHistories.MH_from_Z,
    -                              MH_deriv_Z = StarFormationHistories.dMH_dZ,
    -                              kws...) where {S <: Number}
    -result = fit_templates_logamr(models::AbstractMatrix{S},
    -                              data::AbstractVector{<:Number},
    -                              logAge::AbstractVector{<:Number},
    -                              metallicities::AbstractVector{<:Number}
    -                              T_max::Number
    -                              [, σ::Number];
    -                              x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),
    -                                        [1e-4, 5e-5, 0.2]),
    -                              MH_func = StarFormationHistories.MH_from_Z,
    -                              MH_deriv_Z = StarFormationHistories.dMH_dZ,
    -                              kws...) where {S <: Number}

    Method that fits a linear combination of the provided Hess diagrams models to the observed Hess diagram data, constrained to have a logarithmic age-metallicity relation with the mean metal mass fraction μ_Z of element i of unique(logAge) being μ_Z[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. This is converted to a mean metallicity in [M/H] via the provided callable keyword argument MH_func which defaults to MH_from_Z. α is therefore a slope in the units of inverse Gyr, and β is the mean metal mass fraction of stars born at the earliest valid lookback time, determined by keyword argument T_max which has units of Gyr. Individual weights for each isochrone template are then determined via Gaussian weighting with the above mean [M/H] and the standard deviation σ in dex, which can either be fixed or fit.

    This function is designed to work best with a "grid" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.

    The second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    Arguments

    • models are the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.
    • data is the Hess diagram for the observed data.
    • logAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.
    • metallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This should be a logarithmic abundance like [M/H] or [Fe/H].
    • T_max::Number is the maximum lookback time in Gyr for which the age-metallicity relation is to be valid. In most cases this should just be the maximum of the logAge vector argument maximum(logAge) or slightly larger. By definition, this is the lookback time at which μ_Z = β.

    Optional Arguments

    • If provided, σ::Number is the fixed width of the Gaussian the defines the metallicity distribution function (MDF) at fixed logAge. If this argument is omitted, σ will be a free parameter in the fit.

    Keyword Arguments

    • x0 is the vector of initial guesses for the stellar mass coefficients per unique entry in logAge, plus the variables that define the metallicity evolution model. You should basically always be calculating and passing this keyword argument. We provide construct_x0_mdf to prepare the first part of x0 assuming constant star formation rate, which is typically a good initial guess. You then have to concatenate that result with an initial guess for the metallicity evolution parameters. For example, x0=vcat(construct_x0_mdf(logAge, 13.7; normalize_value=1e4), [1e-4, 5e-5, 0.2]), where logAge is a valid argument for this function (see above), and the initial guesses on the parameters are [α, β, σ] = [1e-4, 5e-5, 0.2]. If you provide σ as an optional argument, then you should not include an entry for it in x0.
    • MH_func is a callable that takes a metal mass fraction Z and returns the logarithmic abundance [M/H]; by default uses MH_from_Z.
    • MH_deriv_Z is a callable that takes a metal mass fraction Zj and returns the derivative of MH_func with respect to the metal mass fraction Z evaluated at Zj. For the default value of MH_func, dMH_dZ provides the correct derivative. You only need to change this if you use an alternate MH_func.
    • Other kws... are passed to Optim.options to set things like convergence criteria for the optimization.
    source

    Sampling Functions

    Fixed Logarithmic Age-Metallicity Relation

    We support fitting only the star formation parameters by adopting fixed values for $\alpha$, $\beta$, and $\sigma$ through the fixed_log_amr method.

    StarFormationHistories.fixed_log_amrFunction
    fixed_log_amr(models,
    -              data,
    -              logAge::AbstractVector{<:Number},
    -              metallicities::AbstractVector{<:Number},
    -              T_max::Number,
    -              α::Number,
    -              β::Number,
    -              σ::Number;
    -              MH_func = StarFormationHistories.MH_from_Z,
    -              kws...)

    Given a fully specified logarithmic age-metallicity relation with parameters (α, β, σ), fits maximum likelihood and maximum a posteriori star formation parameters. MH_func is a callable that returns a logarithmic metallicity [M/H] for a metal mass fraction argument and defaults to MH_from_Z. T_max is the lookback time in Gyr at which the mean metal mass fraction is eta. See fixed_amr for info on format of returned result.

    source
    fixed_log_amr(models,
    -              data,
    -              logAge::AbstractVector{<:Number},
    -              metallicities::AbstractVector{<:Number},
    -              T_max::Number,
    -              constraint1,
    -              constraint2,
    -              σ::Number;
    -              Z_func = StarFormationHistories.Z_from_MH,
    -              kws...)

    Call signature that takes two fixed points low_constraint and high_constraint that define points that must lie on the logarithmic age-metallicity relation and calculates the slope paramters α and β for you. Format is ([M/H], age [Gyr]), i.e. constraint1 = (-2.5, 13.7) for the first point at [M/H] = -2.5 at 13.7 Gyr lookback time and constraint2 = (-0.8, 0.0) for the second point at [M/H] = -0.8 at present-day (0.0 Gyr lookback time). The AMR is normalized so that the mean metal mass fraction at a lookback time in Gyr of T_max is Z = β. Metallicities in [M/H] are converted to metal mass fractions Z via the provided callable keyword argument Z_func which defaults to Z_from_MH. See fixed_amr for info on format of returned result.

    source

    We provide the calculate_αβ_logamr convenience function to calculate the slope $\alpha$ and intercept $\beta$ from two points on the age-metallicity relation.

    StarFormationHistories.calculate_αβ_logamrFunction
    (α, β) = calculate_αβ_logamr(low_constraint,
    -                             high_constraint,
    -                             T_max,
    -                             Z_func=Z_from_MH)

    Calculates linear Z (log [M/H]) age-metallicity relation (AMR) slope α and intercept β from two points on the line with form ([M/H], age [Gyr]) given by the first two arguments. The AMR is normalized so that the mean metal mass fraction at a lookback time in Gyr of T_max is Z = β. More info given in fixed_log_amr.

    source

    Implementation

    As the only part of the model that differs from the linear AMR case is the mean age-metallicity relation, most of the derivation for the linear AMR case is still valid here. In particular, only the partial derivatives of the relative weights $A_{j,k} \equiv \text{exp} \left( -\frac{1}{2 \, \sigma^2} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)^2\right)$ with respect to the fitting parameters $\alpha$ and $\beta$ need to be recalculated under the new model. The partial derivative with respect to $\sigma$ is the same, as the mean metallicity in time bin $j$, denoted $\mu_j$, does not depend on $\sigma$.

    \[\begin{aligned} -Z_j &\equiv \langle Z \left(t_j\right) \rangle = \alpha \, \left( T_\text{max} - t_j \right) + \beta \\ - \\ -\mu_j &\equiv \langle [\text{M}/\text{H}] \rangle \left(t_j\right) = \text{log} \left( \frac{\langle Z\left(t_j\right) \rangle}{X_j} \right) - \text{log} \left( \frac{Z_\odot}{X_\odot} \right) \\ -&= \text{log} \left[ \frac{ \alpha \, \left( T_\text{max} - t_j \right) + \beta}{X_j} \right] - \text{log} \left( \frac{Z_\odot}{X_\odot} \right) -\end{aligned}\]

    We can use the chain rule to write

    \[\begin{aligned} -A_{j,k} &\equiv \text{exp} \left( - \frac{1}{2} \left( \frac{ [\text{M}/\text{H}]_k - \mu_j}{\sigma} \right)^2 \right) \\ -\frac{\partial \, A_{j,k}}{\partial \, \beta} &= \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial \beta} \\ -\frac{\partial \, A_{j,k}}{\partial \, \alpha} &= \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial \alpha} \\ -\end{aligned} \\\]

    By definition the hydrogen, helium, and metal mass fractions, $X$, $Y$, and $Z$ respectively, must sum to 1. For PARSEC models, $Y$ is a function of $Z$ (see Y_from_Z) such that $X_j$ is a function of $Z_j$ and therefore also $\alpha$ and $\beta$. Under the PARSEC model, $Y = Y_p + \gamma \, Z$, we have $X(Z) = 1 - \left( Y_p + \gamma \, Z \right) - Z$ such that we can rewrite the $\mu_j$ as

    \[\mu_j = \text{log} \left( \frac{Z_j}{1 - \left( Y_p + \gamma \, Z_j \right) - Z_j} \right) - \text{log} \left( \frac{Z_\odot}{X_\odot} \right)\]

    and we can further expand the partial derivatives of $\mu_j$ as

    \[\begin{aligned} -\frac{\partial \mu_j}{\partial \beta} &= \frac{\partial \mu_j}{\partial Z_j} \, \frac{\partial Z_j}{\partial \beta} \\ -\frac{\partial \mu_j}{\partial \alpha} &= \frac{\partial \mu_j}{\partial Z_j} \, \frac{\partial Z_j}{\partial \alpha} \\ -\end{aligned} \\\]

    such that the model-dependent portion $\left( \frac{\partial Z_j}{\partial \beta} \right)$ can be separated from what is essentially a calibration defining how [M/H] is calculated from $Z$ $\left( \frac{\partial \mu_j}{\partial Z_j} \right)$. Given our model $Z_j = \alpha \, \left( T_\text{max} - t_j \right) + \beta$ and the PARSEC calibration for conversion between $Z_j$ and $\mu_j$ (i.e., [M/H]), we have

    \[\begin{aligned} -\frac{\partial \mu_j}{\partial Z_j} &= \frac{Y_p - 1}{\text{ln}10 \, Z_j \, \left( Y_p + Z_j + \gamma \, Z_j - 1 \right)} \\ -\frac{\partial Z_j}{\partial \beta} &= \frac{\partial \left[\alpha \, \left( T_\text{max} - t_j \right) + \beta \right]}{\partial \beta} = 1 \\ -\frac{\partial Z_j}{\partial \alpha} &= \frac{\partial \left[ \alpha \, \left( T_\text{max} - t_j \right) + \beta \right]}{\partial \alpha} = T_\text{max} - t_j \\ -\end{aligned}\]

    [M/H] as a function of $Z$ for the PARSEC calibration is available as MH_from_Z and the partial derivative $\frac{\partial \mu_j}{\partial Z_j}$ is available as dMH_dZ.

    Which gives us final results

    \[\begin{aligned} -\frac{\partial \, A_{j,k}}{\partial \, \mu_j} &= \frac{A_{j,k} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)}{\sigma^2} \\ -\frac{\partial \mu_j}{\partial \beta} &= \frac{\partial \mu_j}{\partial Z_j} \, \frac{\partial Z_j}{\partial \beta} = \left( \frac{Y_p - 1}{\text{ln}(10) \, Z_j \, \left( Y_p + Z_j + \gamma \, Z_j - 1 \right)} \right) \ \left( 1 \right) \\ -\frac{\partial \mu_j}{\partial \alpha} &= \frac{\partial \mu_j}{\partial Z_j} \, \frac{\partial Z_j}{\partial \alpha} = \left( \frac{Y_p - 1}{\text{ln}(10) \, Z_j \, \left( Y_p + Z_j + \gamma \, Z_j - 1 \right)} \right) \ \left( T_\text{max} - t_j \right) \\ - -%% \frac{\partial \mu_j}{\partial \beta} &= \frac{1}{\left( t_j \, \alpha + \beta \right) \, \text{ln}(10)} \\ -%% \frac{\partial \mu_j}{\partial \alpha} &= \frac{t}{\left( t_j \, \alpha + \beta \right) \, \text{ln}(10)} = t \, \frac{\partial \mu_j}{\partial \beta} \\ -\end{aligned}\]

    such that

    \[\begin{aligned} -\frac{\partial \, A_{j,k}}{\partial \, \beta} &= \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial \beta} = \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial Z_j} \, \frac{\partial Z_j}{\partial \beta} \\ -&= \left( \frac{A_{j,k} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)}{\sigma^2} \right) \ \left( \frac{Y_p - 1}{\text{ln}10 \, Z_j \, \left( Y_p + Z_j + \gamma \, Z_j - 1 \right)} \right) \\ -\frac{\partial \, A_{j,k}}{\partial \, \alpha} &= \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial \alpha} = \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial Z_j} \, \frac{\partial Z_j}{\partial \alpha} \\ -&= \left( \frac{A_{j,k} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)}{\sigma^2} \right) \ \left( \frac{Y_p - 1}{\text{ln}10 \, Z_j \, \left( Y_p + Z_j + \gamma \, Z_j - 1 \right)} \right) \ \left( T_\text{max} - t_j \right) \\ -&= \left( T_\text{max} - t_j \right)\ \frac{\partial \, A_{j,k}}{\partial \, \beta} \\ - -%% \frac{\partial \, A_{j,k}}{\partial \, \beta} &= \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial \beta} = \left( \frac{A_{j,k} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)}{\sigma^2} \right) \, \left( \frac{1}{\left( t_j \, \alpha + \beta \right) \, \text{ln}(10)} \right) \\ -%% &= \frac{A_{j,k} \, \left( [\text{M}/\text{H}]_k - \mu_j \right)}{\text{ln}(10) \, \sigma^2 \, \left( t_j \, \alpha + \beta \right)} \\ -%% \frac{\partial \, A_{j,k}}{\partial \, \alpha} &= \frac{\partial \, A_{j,k}}{\partial \, \mu_j} \, \frac{\partial \mu_j}{\partial \alpha} = t \, \frac{\partial \, A_{j,k}}{\partial \, \beta} -\end{aligned}\]

    diff --git a/previews/PR33/fitting/log_amr_plot.svg b/previews/PR33/fitting/log_amr_plot.svg deleted file mode 100644 index 600a6c9..0000000 --- a/previews/PR33/fitting/log_amr_plot.svg +++ /dev/null @@ -1,2629 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/previews/PR33/fitting/unconstrained/index.html b/previews/PR33/fitting/unconstrained/index.html deleted file mode 100644 index 96b7293..0000000 --- a/previews/PR33/fitting/unconstrained/index.html +++ /dev/null @@ -1,133 +0,0 @@ - -High-Level Methods for Unconstrained Fitting · StarFormationHistories.jl

    High-Level Methods for Unconstrained Fitting

    Maximum Likelihood Optimization

    Template construction is by far the most complicated step in the fitting procedure. Once your templates have been constructed, fitting them to an observed Hess diagram amounts to maximization of the Poisson likelihood ratio (Dolphin 2002). It is possible to construct more complicated hierarchical models including things like metallicity distribution functions; we discuss these in the next section. In this section we discuss methods for fitting where the only constraint is that star formation rates cannot be negative. We provide the StarFormationHistories.construct_x0 method to help with setting the initial guess for this optimization.

    StarFormationHistories.construct_x0Function
    x0::typeof(logage) = construct_x0(logAge::AbstractVector{T},
    -                                  T_max::Number;
    -                                  normalize_value::Number=one(T)) where T <: Number

    Generates a vector of initial stellar mass normalizations for input to fit_templates or hmc_sample with a total stellar mass of normalize_value such that the implied star formation rate is constant across the provided logAge vector that contains the log10(Age [yr]) of each isochrone that you are going to input as models. For the purposes of computing the constant star formation rate, the provided logAge are treated as left-bin edges, with the final right-bin edge being T_max, which has units of Gyr. For example, you might have logAge=[6.6, 6.7, 6.8] in which case a final logAge of 6.9 would give equal bin widths. In this case you would set T_max = exp10(6.9) / 1e9 ≈ 0.0079 so that the width of the final bin for the star formation rate calculation has the same log10(Age [yr]) step as the other bins.

    Examples

    julia> x0 = construct_x0(repeat([7.0,8.0,9.0],3), 10.0; normalize_value=5.0)
    -9-element Vector{Float64}: ...
    -
    -julia> sum(x0)
    -4.99... # Close to `normalize_value`.
    source

    When it comes to performing the optimization, the simplest method we offer is StarFormationHistories.fit_templates_lbfgsb. This will optimize one coefficient per template; there is no overarching metallicity evolution or other constraint, besides that the stellar masses of the populations cannot be negative. This performs a maximum likelihood optimization with the bounded quasi-Newton LBFGS method as implemented in L-BFGS-B and wrapped in LBFGS.jl with analytic gradients. It is fast and converges fairly reliably, even when the initial guess is not particularly close to the maximum likelihood estimate. It provides no uncertainty estimation. It is normal for some of the coefficients to converge to zero.

    StarFormationHistories.fit_templates_lbfgsbFunction
    (-logL, coeffs) = 
    -fit_templates_lbfgsb(models::AbstractVector{T},
    -                     data::AbstractMatrix{<:Number};
    -                     x0::AbstractVector{<:Number} = ones(S,length(models)),
    -                     factr::Number=1e-12,
    -                     pgtol::Number=1e-5,
    -                     iprint::Integer=0,
    -                     kws...) where {S <: Number, T <: AbstractMatrix{S}}

    Finds the coefficients coeffs that maximize the Poisson likelihood ratio (equations 7–10 in Dolphin 2002) for the composite Hess diagram model sum(models .* coeffs) given the provided templates models and the observed Hess diagram data using the box-constrained LBFGS method provided by LBFGSB.jl.

    Arguments

    • models::AbstractVector{AbstractMatrix{<:Number}}: the list of template Hess diagrams for the simple stellar populations (SSPs) being considered; all must have the same size.
    • data::AbstractMatrix{<:Number}: the observed Hess diagram; must match the size of the templates contained in models.

    Keyword Arguments

    • x0: The vector of initial guesses for the stellar mass coefficients. You should basically always be calculating and passing this keyword argument; we provide StarFormationHistories.construct_x0 to prepare x0 assuming constant star formation rate, which is typically a good initial guess.
    • factr::Number: Keyword argument passed to LBFGSB.lbfgsb; essentially a relative tolerance for convergence based on the inter-iteration change in the objective function.
    • pgtol::Number: Keyword argument passed to LBFGSB.lbfgsb; essentially a relative tolerance for convergence based on the inter-iteration change in the projected gradient of the objective.
    • iprint::Integer: Keyword argument passed to LBFGSB.lbfgsb controlling how much information is printed to the terminal. Setting to 1 can sometimes be helpful to diagnose convergence issues. Setting to -1 will disable printing.

    Other kws... are passed to LBFGSB.lbfgsb.

    Returns

    • -logL::Number: the minimum negative log-likelihood found by the optimizer.
    • coeffs::Vector{<:Number}: the maximum likelihood estimate for the coefficient vector.

    Notes

    • It can be helpful to normalize your models to contain realistic total stellar masses to aid convergence stability; for example, if the total stellar mass of your population is 10^7 solar masses, then you might normalize your templates to contain 10^3 solar masses. If you are using partial_cmd_smooth to construct the templates, you can specify this normalization via the normalize_value keyword.
    source
    fit_templates_lbfgsb(models::AbstractMatrix{S},
    -                     data::AbstractVector{<:Number};
    -                     x0::AbstractVector{<:Number} = ones(S,size(models,2)),
    -                     factr::Number=1e-12,
    -                     pgtol::Number=1e-5,
    -                     iprint::Integer=0,
    -                     kws...) where S <: Number

    This call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source

    This method simply minimizes the negative logarithm of the Poisson likelihood ratio (Equation 10 in Dolphin 2002),

    \[- \text{ln} \, \mathscr{L} = \sum_i m_i - n_i \times \left( 1 - \text{ln} \, \left( \frac{n_i}{m_i} \right) \right)\]

    where $m_i$ is bin $i$ of the complex model and $n_i$ is bin $i$ of the observed Hess diagram; this can therefore be thought of as computing the maximum likelihood estimate.

    We also provide StarFormationHistories.fit_templates_fast, which is the fastest method we offer for deriving a maximum likelihood estimate for the type of model described above.

    StarFormationHistories.fit_templates_fastFunction
    (coeffs::Vector{::eltype(x0)}, result::Optim.MultivariateOptimizationResults) =
    -fit_templates_fast(models::AbstractVector{T},
    -                   data::AbstractMatrix{<:Number};
    -                   x0::AbstractVector{<:Number} = ones(S,length(models)),
    -                   kws...)
    -                   where {S <: Number, T <: AbstractMatrix{S}}

    Finds only the maximum likelihood estimate (MLE) for the coefficients coeffs given the provided data such that the best-fit composite Hess diagram model is sum(models .* coeffs). This is a simplification of the main fit_templates function, which will return the MLE as well as the maximum a posteriori estimate, and further supports uncertainty quantification. For additional details on arguments to this method, see the documentation for fit_templates.

    This method optimizes parameters θ such that coeffs = θ.^2 – this allows for faster convergence than both the fit_templates_lbfgsb method, which does not use a variable transformation, and the logarithmic transformation used in fit_templates. However, the inverse Hessian is not useful for uncertainty estimation under this transformation. As such this method only returns the MLE for coeffs as a vector and the result object returned by Optim.optimize. While this method offers fewer features than fit_templates, this method's runtime is typically half as long (or less). As such, this method is recommended for use in performance-sensitive applications like hierarchical models or hyperparameter estimation where the additional features of fit_templates are unnecessary. In these applications, the value of the objective function at the derived MLE is typically desired as well; this can be obtained the from result::Optim.MultivariateOptimizationResults object as Optim.minimum(result). Note that this will return the negative loglikelihood, which is what is minimized in this application.

    Notes

    1. By passing additional convergence keyword arguments supported by Optim.Options (see this guide), it is possible to converge to the MLE in fewer than 30 iterations with fewer than 100 calls to the likelihood and gradient methods. For example, the main convergence criterion is typically the magnitude of the gradient vector, which by default is g_abstol=1e-8, terminating the optimization when the magnitude of the gradient is less than 1e-8. We find results are typically sufficiently accurate with g_abstol=1e-3, which often uses half as many objective evaluations as the default value.
    source
    fit_templates_fast(models::AbstractMatrix{S},
    -                   data::AbstractVector{<:Number};
    -                   x0::AbstractVector{<:Number} = ones(S,size(models,2)),
    -                   kws...)
    -                   where S <: Number

    This call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source

    Posterior Sampling: MCMC

    For low-dimensional problems, Markov Chain Monte Carlo (MCMC) methods can be an efficient way to sample the posterior and obtain uncertainty estimates on the fitting coefficients $r_j$. We provide StarFormationHistories.mcmc_sample for this purpose. Internally this uses the multi-threaded affine-invariant MCMC sampler from KissMCMC.jl to perform the sampling, which is based on the same algorithm as Python's emcee (specifically, their emcee.moves.StretchMove). There are other MCMC packages like AdvancedMH.jl that offer additional features like distributed execution.

    StarFormationHistories.mcmc_sampleFunction
    result::MCMCChains.Chains =
    -mcmc_sample(models::AbstractVector{<:AbstractMatrix{T}},
    -            data::AbstractMatrix{S},
    -            x0::Union{AbstractVector{<:AbstractVector{<:Number}}, AbstractMatrix{<:Number}},
    -            nwalkers::Integer,
    -            nsteps::Integer;
    -            nburnin::Integer=0,
    -            nthin::Integer=1,
    -            a_scale::Number=2.0,
    -            use_progress_meter::Bool=true)
    -mcmc_sample(models::AbstractMatrix{<:Number},
    -            data::AbstractVector{<:Number},
    -            args...; kws...)

    Samples the posterior of the coefficients coeffs such that the full model of the observational data is sum(models .* coeffs). Uses the Poisson likelihood ratio as defined by equations 7–10 of Dolphin 2002. Sampling is done using the affine-invariant MCMC sampler implemented in KissMCMC.jl, which is analogous to Python's emcee.moves.StretchMove. This method will automatically parallelize over threads. If you need distributed execution, you may want to look into AdvancedMH.jl.

    The second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    Arguments

    • models::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.
    • data::AbstractMatrix{<:Number} is the Hess diagram for the observed data.
    • x0::Union{AbstractVector{<:AbstractVector{<:Number}}, AbstractMatrix{<:Number}} are the initial positions for the MCMC walkers. If providing a vector of vectors, it must be a vector of length nwalkers with each internal vector having length equal to length(models). You can alternatively provide a matrix of size (nwalkers, length(models)) or (length(models), nwalkers).
    • nwalkers::Integer is the number of unique walkers or chains to use.
    • nsteps::Integer is the number of steps evolve the walkers for.

    Keyword Arguments

    • nburnin::Integer=0 is the number of steps to discard from the start of each chain.
    • nthin::Integer=1 is the factor by which to thin the chain; walker positions will only be saved every nthin steps.
    • a_scale::Number=2.0 is the scale parameter for the stretch move; probably shouldn't need to be changed.
    • use_progress_Meter::Bool=true indicates whether or not to show a progress bar during the MCMC procedure.

    Returns

    • result is a MCMCChains.Chains instance which enables easy calculation of diagnostic and summary statistics. This type can be indexed and used like a 3-D array of samples with shape (nsteps, length(models), nwalkers).

    Notes

    • When displaying result to the terminal it will display summary statistics (MCMCChains.summarystats) and quantiles (MCMCChains.quantile) by calling the MCMCChains.describe method. This can take a second but is nice to have as an option.
    • The highest posterior density interval, which is the narrowest credible interval that includes the posterior mode, can be calculated with the MCMCChains.hpd method.
    • If you want to extract the array of samples from the MCMCChains.Chains object, you can index result.value – this will return an AxisArray but can be converted to a normal array with Array(result.value).

    Examples

    import Distributions: Poisson
    -coeffs = rand(10) # SFH coefficients we want to sample
    -models = [rand(100,100) .* 100 for i in 1:length(coeffs)] # Vector of model Hess diagrams
    -data = rand.(Poisson.( sum(models .* coeffs) ) ) # Poisson-sample the model `sum(models .* coeffs)`
    -nwalkers = 1000
    -nsteps = 400
    -x0 = rand(nwalkers, length(coeffs)) # Initial walker positions
    -result = mcmc_sample(models, data, x0, nwalkers, nsteps) # Sample
    -Chains MCMC chain (400×10×1000 Array{Float64, 3}) ...
    source

    Posterior Sampling: Change of Variables and HMC

    Dolphin 2013 examined methods for obtaining uncertainties on the fitted coefficients (the $r_j$ in Equation 1 of Dolphin 2002) and found that the Hamiltonian Monte Carlo (HMC) approach allowed for relatively efficient sampling of the posterior distribution when considering many isochrones in the modelling process. HMC requires that the variables to be fit are continuous over the real numbers and so requires a change of variables. Rather than sampling the variables $r_j$ directly, we can sample $\theta_j = \text{ln} \left( r_j \right)$ such that the sampled variables are continuous over the real numbers $-\infty < \theta_j < \infty$ while the $r_j=\text{exp} \left( \theta_j \right)$ coefficients are bounded from $0 < r_j < \infty$. Using a logarithmic transformation has the additional benefit that the gradient of the Poisson likelihood ratio is still continuous and easy to compute analytically.

    While maximum likelihood estimates are invariant under variable transformations, sampling methods like HMC are not, as formally the posterior being sampled from is a distribution and therefore must be integrable over the sampling coefficients. We can write the posterior from which we wish to sample as

    \[\begin{aligned} -p(r_j | D) &= \frac{p(D | r_j) \; p(r_j)}{Z} \\ -p(\boldsymbol{r} | D) &= \frac{1}{Z} \; \prod_j p(D | r_j) \; p(r_j) \\ --\text{ln} \; p(\boldsymbol{r} | D) &= \text{ln} \, Z - \sum_j \, \text{ln} \, p(D | r_j) + \text{ln} \, p(r_j) \\ -&= \text{ln} \, Z - \text{ln} \, \mathscr{L} + \sum_j \text{ln} \, p(r_j) -\end{aligned}\]

    where $Z$ is the Bayesian evidence (a constant that can be neglected for sampling methods), $p \left( r_j \right)$ is the prior on the star formation history, and $\mathscr{L}$ is the Poisson likelihood ratio discussed above. An uninformative (and unnormalized) prior on the coefficients $r_j$ could take the form of

    \[p(r_j) = \begin{cases} -1; & r_j \geq 0\\ -0; & r_j < 0 -\end{cases}\]

    such that, if the coefficients $r_j$ are guaranteed to be positive, the final term becomes zero (since $\text{ln}(1)=0$) and

    \[-\text{ln} \; p(\boldsymbol{r} | D) = \text{ln} \, Z - \text{ln} \, \mathscr{L}\]

    When sampling with methods like HMC, constants like $\text{ln} \, Z$ can be neglected and $-\text{ln} \; p(\boldsymbol{r} | D) \propto - \text{ln} \, \mathscr{L}$ such that the posterior is approximated by the likelihood surface.

    Let us consider now what happens when we wish to do a variable transformation from $r_j$ to $\theta_j = \text{ln} (r_j)$. From above we can write the posterior as

    \[p(r_j | D) = \frac{p(D | r_j) \; p(r_j)}{Z} \\\]

    Under the change of variables formula we can write

    \[\begin{aligned} -p(\theta_j | D) &= p(r_j | D) \left| \frac{d r_j}{d \theta_j} \right| \\ -&= p(r_j | D) \left| \frac{d \theta_j}{d r_j} \right|^{-1} -\end{aligned}\]

    where $\left| \frac{d \theta_j}{d r_j} \right|^{-1}$ is often called the Jacobian correction. We choose $\theta_j$ such that

    \[\begin{aligned} -\theta_j &= \text{ln} ( r_j ) \\ -\left| \frac{d \theta_j}{d r_j} \right| &= \frac{1}{r_j} \\ -r_j &= \text{exp} (\theta_j) \\ -\end{aligned}\]

    which leads to a posterior of

    \[p(\theta_j | D) = \text{exp} (\theta_j) \times p(\text{exp} (\theta_j) | D) = r_j \times p(r_j | D) \\\]

    We can then write the product over the $\theta_j$ as

    \[\begin{aligned} -p(\boldsymbol{\theta} | D) &= \frac{1}{Z} \; \prod_j r_j \; p(D | r_j) \; p(r_j) \\ --\text{ln} \, p(\boldsymbol{\theta} | D) &= \text{ln} \, Z - \sum_j \text{ln} \, (r_j) + \text{ln} \, p(D | r_j) + \text{ln} \, p(r_j) \\ -&= \text{ln} \, Z - \sum_j \text{ln} \, p(D | r_j) + \text{ln} \, p(r_j) - \sum_j \theta_j \\ -&= -\text{ln} \, p(\boldsymbol{r} | D) - \sum_j \theta_j \\ -&= -\text{ln} \, p(\boldsymbol{r} | D) - \sum_j \text{ln} \, (r_j) -\end{aligned}\]

    The choice of a logarithmic transformation means that the negative logarithm of the posterior (which is what HMC uses for its objective function) has this very simple form which allows for simple analytic gradients as well. Once samples of $\theta$ have been obtained from this distribution via HMC or any other sampling method, they can be directly transformed back to the standard coefficients $r_j = \text{exp}(\theta_j)$.

    The method hmc_sample implements this approach for sampling the $\theta_j$ coefficients; these samples can then be used to estimate random uncertainties on the derived star formation history.

    StarFormationHistories.hmc_sampleFunction
    hmc_sample(models::AbstractVector{T},
    -           data::AbstractMatrix{<:Number},
    -           nsteps::Integer [, nchains::Integer];
    -           rng::Random.AbstractRNG=Random.default_rng(),
    -           kws...)
    -           where {S <: Number, T <: AbstractMatrix{S}}
    -hmc_sample(models::AbstractMatrix{S},
    -           data::AbstractVector{<:Number},
    -           nsteps::Integer;
    -           rng::AbstractRNG=default_rng(),
    -           kws...)
    -           where S <: Number

    Function to sample the posterior of the coefficients coeffs such that the full model of the observational data is sum(models .* coeffs). Uses the Poisson likelihood ratio as defined by equations 7–10 of Dolphin 2002 along with a logarithmic transformation of the coeffs so that the fitting variables are continuous and differentiable over all reals. Sampling is done using the No-U-Turn sampler as implemented in DynamicHMC.jl, which is a form of dynamic Hamiltonian Monte Carlo.

    The second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    Arguments

    • models::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.
    • data::AbstractMatrix{<:Number} is the Hess diagram for the observed data.
    • nsteps::Integer is the number of samples to draw per chain.

    Optional Arguments

    • nchains::Integer: If this argument is not provided, this method will return a single chain. If this argument is provided, it will sample nchains chains using all available Julia threads and will return a vector of the individual chains.

    Keyword Arguments

    • rng::Random.AbstractRNG is the random number generator that will be passed to DynamicHMC.jl. If nchains is provided this method will attempt to sample in parallel, requiring a thread-safe rng such as that provided by Random.default_rng().

    All other keyword arguments kws... will be passed to DynamicHMC.mcmc_with_warmup or DynamicHMC.mcmc_keep_warmup depending on whether nchains is provided.

    Returns

    • If nchains is not provided, returns a NamedTuple as summarized in DynamicHMC.jl's documentation. In short, the matrix of samples can be extracted and transformed as exp.( result.posterior_matrix ). Statistics about the chain can be obtained with DynamicHMC.Diagnostics.summarize_tree_statistics(result.tree_statistics); you want to see a fairly high acceptance rate (>0.5) and the majority of samples having termination criteria being "turning." See DynamicHMC.jl's documentation for more information.
    • If nchains is provided, returns a vector of length nchains of the same NamedTuples described above. The samples from each chain in the returned vector can be stacked to a single (nsamples, nchains, length(models)) matrix with DynamicHMC.stack_posterior_matrices(result).

    Examples

    import DynamicHMC
    -import StatFormationHistories: hmc_sample
    -import Statistics: mean
    -# Run sampler using progress meter to monitor progress
    -# assuming you have constructed some templates `models` and your observational Hess diagram `data`
    -result = hmc_sample( models, data, 1000; reporter=DynamicHMC.ProgressMeterReport())
    -# The chain values are stored in result.posterior matrix; extract them with `result.posterior_matrix`
    -# An exponential transformation is needed since the optimization internally uses a logarithmic 
    -# transformation and samples log(θ) rather than θ directly. 
    -mc_matrix = exp.( result.posterior_matrix )
    -# We can look at some statistics from the chain; want to see high acceptance rate (>0.5) and large % of
    -# "turning" for termination criteria. 
    -DynamicHMC.Diagnostics.summarize_tree_statistics(result.tree_statistics)
    -    Hamiltonian Monte Carlo sample of length 1000
    -      acceptance rate mean: 0.92, 5/25/50/75/95%: 0.65 0.88 0.97 1.0 1.0
    -      termination: divergence => 0%, max_depth => 0%, turning => 100%
    -      depth: 0 => 0%, 1 => 64%, 2 => 36%
    -# mc_matrix has size `(length(models), nsteps)` so each column is an independent
    -# sample of the SFH as defined by the coefficients and the rows contain the samples
    -# for each parameter. 
    -mstar_tot = sum.(eachcol(mc_matrix)) # Total stellar mass of the modelled system per sample
    -mc_means = mean.(eachrow(mc_matrix)) # Mean of each coefficient evaluated across all samples
    -# Example with multiple chains sampled in parallel via multi-threading
    -import Threads
    -t_result = hmc_sample( models, data, 1000, Threads.nthreads(); reporter=DynamicHMC.ProgressMeterReport())
    -# Combine the multiple chains into a single matrix and transform
    -# Can then use the same way as `mc_matrix` above
    -mc_matrix = exp.( DynamicHMC.pool_posterior_matrices(t_result) )
    source

    See the DynamicHMC.jl documentation for more information on how to use the chains that are output by this method.

    Inspection of the samples generated by hmc_sample shows that the posterior defined by the above model is typically smooth, well-behaved, and unimodal. In particular, we find that the sampled $r_j$ for coefficients that are non-zero in the MLE are approximately Gaussian distributed while the logarithms of the sampled $r_j$ are roughly Gaussian distributed for coefficients that are zero in the MLE; i.e.

    \[\begin{cases} -X_j \sim \mathcal{N}; & \hat r_j > 0 \\ -\text{ln} \left( X_j \right) \sim \mathcal{N}; & \hat r_j = 0 \\ -\end{cases}\]

    where $X_j$ are the samples of $r_j$ obtained from the posterior and $\hat r_j$ is the maximum likelihood estimate of $r_j$.

    This indicates we may be able to approximate the posterior in the region surrounding the maximum a posteriori (MAP) value by the inverse of the Hessian matrix (see, e.g., Dovi et al. 1991), allowing us to estimate parameter uncertainties very cheaply. The inverse of the Hessian matrix is exactly equal to the variance-covariance matrix of the parameters for a Gaussian probability distribution; for other probability distributions, the inverse of the Hessian approximates the variance-covariance matrix of the parameters when the second-order expansion defined by the Hessian at the maximum is a reasonable approximation to the real objective function being optimized. A particularly simple form arises when the logarithm of the objective is quadratic in the fitting parameters, as in the Gaussian case, because the second derivatives of the objective are constant and do not depend on the fitting parameters or the MAP estimate.

    Maximum a Posteriori Optimization

    Direct computation of the Hessian and its inverse is expensive, so we'd like another way to obtain it. The first-order, quasi-Newton BFGS optimization algorithm provides such a method as it iteratively builds a dense approximation to the inverse Hessian using the change in the gradient of the objective, which we can compute analytically. It is, however, much less memory efficient than the LBFGS algorithm we use in StarFormationHistories.fit_templates_lbfgsb. For moderate isochrone grids up to a few hundred model templates, this is not a problem. Beyond this it may be better to use StarFormationHistories.fit_templates_lbfgsb to obtain the MLE and hmc_sample to obtain posterior samples.

    We implement this optimization scheme in fit_templates, which is our recommended method for unconstrained SFH fitting (i.e., direct fitting of the $r_j$ coefficients). See the next section for notes on more complicated, hierarchical models that can incorporate features like metallicity distribution functions.

    StarFormationHistories.fit_templatesFunction
    result = fit_templates(models::AbstractVector{T},
    -                       data::AbstractMatrix{<:Number};
    -                       x0::AbstractVector{<:Number} = ones(S,length(models)),
    -                       kws...) where {S <: Number, T <: AbstractMatrix{S}}

    Finds both maximum likelihood estimate (MLE) and maximum a posteriori estimate (MAP) for the coefficients coeffs such that the composite Hess diagram model is sum(models .* coeffs) using the provided templates models and the observed Hess diagram data. Utilizes the Poisson likelihood ratio (equations 7–10 in Dolphin 2002) for the likelihood of the data given the model. See the examples in the documentation for comparisons of the results of this method and hmc_sample which samples the posterior via Hamiltonian Monte Carlo.

    Arguments

    • models::AbstractVector{AbstractMatrix{<:Number}}: the list of template Hess diagrams for the simple stellar populations (SSPs) being considered; all must have the same size.
    • data::AbstractMatrix{<:Number}: the observed Hess diagram; must match the size of the templates contained in models.

    Keyword Arguments

    • x0: The vector of initial guesses for the stellar mass coefficients. You should basically always be calculating and passing this keyword argument; we provide StarFormationHistories.construct_x0 to prepare x0 assuming constant star formation rate, which is typically a good initial guess.

    Other kws... are passed to Optim.options to set things like convergence criteria for the optimization.

    Returns

    result is a NamedTuple containing two StarFormationHistories.LogTransformFTResult. The two components of result are result.map or result[1], which contains the results of the MAP optimization, and result.mle or result[2], which contains the results of the MLE optimization. The documentation for StarFormationHistories.LogTransformFTResult contains more information about these types, but briefly they contain the following fields, accessible as, e.g., result.map.μ, result.map.σ, etc.:

    • μ::Vector{<:Number} are the optimized coeffs at the maximum.
    • σ::Vector{<:Number} are the standard errors on the coeffs μ calculated from an estimate of the inverse Hessian matrix evaluated at μ. The inverse of the Hessian matrix at the maximum of the likelihood (or posterior) is a estimator for the variance-covariance matrix of the parameters, but is only accurate when the second-order expansion given by the Hessian at the maximum is a good approximation to the function being optimized (i.e., when the optimized function is approximately quadratic around the maximum; see Dovi et al. 1991 for more information). We find this is often the case for the MAP estimate, but the errors found for coefficients that are ≈0 in the MLE are typically unrealistically small. For coefficients significantly greater than 0, the σ values from the MAP and MLE are typically consistent to 5–10%.
    • invH::Matrix{<:Number} is the estimate of the inverse Hessian matrix at μ that was used to derive σ. The optimization is done under a logarithmic transform, such that θ[j] = log(coeffs[j]) are the actual parameters optimized, so the entries in the Hessian are actually

    \[H^{(j,k)} ( \boldsymbol{\hat \theta} ) = \left. \frac{\partial^2 \, J(\boldsymbol{\theta})}{\partial \theta_j \, \partial \theta_k} \right\vert_{\boldsymbol{\theta}=\boldsymbol{\hat \theta}}\]

    • result is the full object returned by the optimization from Optim.jl; this is of type Optim.MultivariateOptimizationResults. Remember that the optimization is done with parameters θ[j] = log(coeffs[j]) when dealing with this raw output. This means that, for example, we calculate result.map.μ as exp.(Optim.minimizer(result.map.result)).

    The special property of the StarFormationHistories.LogTransformFTResult type is that you can draw a set of N::Integer random parameter samples from the result using the inverse Hessian approximation discussed above by doing rand(result.map, N). This type implements the random sampling API of Distributions.jl so the other standard sampling methods should work as well. In our tests these samples compare very favorably against those from hmc_sample, which samples the posterior via Hamiltonian Monte Carlo and is therefore more robust but much more expensive. We compare these methods in the examples.

    Notes

    • This method uses the BFGS method from Optim.jl internally because it builds and tracks the inverse Hessian matrix approximation which can be used to estimate parameter uncertainties. BFGS is much more memory-intensive than LBFGS (as used for StarFormationHistories.fit_templates_lbfgsb) for large numbers of parameters (equivalently, many models), so you should consider LBFGS to solve for the MLE along with hmc_sample to sample the posterior if you are using a large grid of models (greater than a few hundred).
    • The BFGS implementation we use from Optim.jl uses BLAS operations during its iteration. The OpenBLAS that Julia ships with will often default to running on multiple threads even if Julia itself is started with only a single thread. You can check the current number of BLAS threads with import LinearAlgebra: BLAS; BLAS.get_num_threads(). For the problem sizes typical of this function we actually see performance regression with larger numbers of BLAS threads. For this reason you may wish to use BLAS in single-threaded mode; you can set this as import LinearAlgebra: BLAS; BLAS.set_num_threads(1).
    source
    fit_templates(models::AbstractMatrix{S},
    -              data::AbstractVector{<:Number};
    -              x0::AbstractVector{<:Number} = ones(S,length(models)),
    -              kws...) where S <: Number

    This call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.

    source
    StarFormationHistories.LogTransformFTResultType
    LogTransformFTResult(μ::AbstractVector{<:Number},
    -                     σ::AbstractVector{<:Number},
    -                     invH::AbstractMatrix{<:Number},
    -                     result)

    Type for containing the maximum likelihood estimate (MLE) and maximum a posteriori (MAP) results from fit_templates. The fitted coefficients are available in the μ field. Estimates of the standard errors are available in the σ field. These have both been transformed from the native logarithmic fitting space into natural units (i.e., stellar mass or star formation rate).

    invH contains the estimated inverse Hessian of the likelihood / posterior at the maximum point in the logarithmic fitting units. result is the full result object returned by the optimization routine.

    This type is implemented as a subtype of Distributions.Sampleable{Multivariate, Continuous} to enable sampling from an estimate of the likelihood / posterior distribution. We approximate the distribution as a multivariate Gaussian in the native (logarithmically transformed) fitting variables with covariance matrix invH and means log.(μ). We find this approximation is good for the MAP result but less robust for the MLE. You can obtain N::Integer samples from the distribution by rand(R, N) where R is an instance of this type; this will return a size length(μ) x N matrix, or fail if invH is not positive definite.

    Examples

    julia> result = fit_templates(models, data);
    -
    -julia> typeof(result.map)
    -StarFormationHistories.LogTransformFTResult{...}
    -
    -julia> size(rand(result.map, 3)) == (length(models),3)
    -true
    source

    Once you have obtained stellar mass coefficients from the above methods, you can convert them into star formation rates and compute per-age mean metallicities with StarFormationHistories.calculate_cum_sfr.

    StarFormationHistories.calculate_cum_sfrFunction
    (unique_logAge, cum_sfh, sfr, mean_MH) =
    -    calculate_cum_sfr(coeffs::AbstractVector,
    -                      logAge::AbstractVector,
    -                      MH::AbstractVector,
    -                      T_max::Number;
    -                      normalize_value=1,
    -                      sorted::Bool=false)

    Calculates cumulative star formation history, star formation rates, and mean metallicity evolution as functions of logAge = log10(age [yr]).

    Arguments

    • coeffs::AbstractVector is a vector of stellar mass coefficients such as those returned by fit_templates, for example. Actual stellar mass in stellar population j is coeffs[j] * normalize_value.
    • logAge::AbstractVector is a vector giving the log10(age [yr]) of the stellar populations corresponding to the provided coeffs. For the purposes of calculating star formation rates, these are assumed to be left-bin edges.
    • MH::AbstractVector is a vector giving the metallicities of the stellar populations corresponding to the provided coeffs.
    • T_max::Number is the rightmost final bin edge for calculating star formation rates. For example, you might have logAge=[6.6, 6.7, 6.8] in which case a final logAge of 6.9 would give equal bin widths. In this case you would set T_max = exp10(6.9) / 1e9 ≈ 0.0079 so that the width of the final bin for the star formation rate calculation has the same log10(Age [yr]) step as the other bins.

    Keyword Arguments

    • normalize_value is a multiplicative prefactor to apply to all the coeffs; same as the keyword in partial_cmd_smooth.
    • sorted::Bool is either true or false and signifies whether to assume logAge is sorted.

    Returns

    • unique_logAge::Vector is essentially unique(sort(logAge)) and provides the x-values you would plot the other returned vectors against.
    • cum_sfh::Vector is the normalized cumulative SFH implied by the provided coeffs. This is ~1 at the most recent time in logAge and decreases as logAge increases.
    • sfr::Vector gives the star formation rate across each bin in unique_logAge. If coeffs .* normalize_value are in units of solar masses, then sfr is in units of solar masses per year.
    • mean_MH::Vector gives the stellar-mass-weighted mean metallicity of the stellar population as a function of unique_logAge.
    source
    diff --git a/previews/PR33/helpers/index.html b/previews/PR33/helpers/index.html deleted file mode 100644 index abf2a29..0000000 --- a/previews/PR33/helpers/index.html +++ /dev/null @@ -1,6 +0,0 @@ - -Helper Functions · StarFormationHistories.jl

    Helper Functions

    Distances and Sizes

    StarFormationHistories.arcsec_to_pcFunction
    arcsec_to_pc(arcsec, dist_mod)

    Converts on-sky angle in arcseconds to physical separation based on distance modulus under the small-angle approximation.

    \[r ≈ 10^{μ/5 + 1} \times \text{atan}(θ/3600)\]

    source

    Magnitudes and Luminosities

    Metallicities

    StarFormationHistories.Y_from_ZFunction
    Y_from_Z(Z, Y_p=0.2485, γ=1.78)

    Calculates the helium mass fraction (Y) for a star given its metal mass fraction (Z) using the approximation Y = Y_p + γ * Z, with Y_p being the primordial helium abundance Y_p=0.2485 as assumed for PARSEC isochrones and γ=1.78 matching the input scaling for PARSEC as well.

    source
    StarFormationHistories.X_from_ZFunction
    X_from_Z(Z[, Yp, γ])

    Calculates the hydrogen mass fraction (X) for a star given its metal mass fraction (Z) via X = 1 - (Z + Y), with the helium mass fraction Y approximated via StarFormationHistories.Y_from_Z. You may also provide the primordial helium abundance Y_p and γ such that Y = Y_p + γ * Z; these are passed through to X_from_Z.

    source
    StarFormationHistories.MH_from_ZFunction
    MH_from_Z(Z, solZ=0.01524; Y_p = 0.2485, γ = 1.78)

    Calculates [M/H] = log(Z/X) - log(Z/X)⊙. Given the provided solar metal mass fraction solZ, it calculates the hydrogen mass fraction X for both the Sun and the provided Z with StarFormationHistories.X_from_Z. You may also provide the primordial helium abundance Y_p and γ such that Y = Y_p + γ * Z; these are passed through to X_from_Z.

    The present-day solar Z is measured to be 0.01524 (Caffau et al. 2011), but for PARSEC isochrones an [M/H] of 0 corresponds to Z=0.01471. This is because of a difference between the Sun's initial and present helium content caused by diffusion. If you want to reproduce PARSEC's scaling, you should set solZ=0.01471.

    This function is an approximation and may not be suitable for precision calculations.

    source
    StarFormationHistories.Z_from_MHFunction
    Z_from_MH(MH, solZ=0.01524; Y_p = 0.2485, γ = 1.78)

    Calculates metal mass fraction Z assuming

    • the PARSEC relation for the helium mass fraction Y = Y_p + γ * Z with primordial helium abundance Y_p = 0.2485, and γ = 1.78, and
    • the solar metal mass fraction solZ = 0.01524.
    source
    StarFormationHistories.mdf_amrFunction
    (unique_MH, mass_mdf) =
    -mdf_amr(coeffs::AbstractVector{<:Number},
    -        logAge::AbstractVector{<:Number},
    -        metallicities::AbstractVector{<:Number})

    Calculates the mass-weighted metallicity distribution function given a set of stellar mass coefficients coeffs for stellar populations with logarithmic ages logAge=log10(age [yr]) and metallicities given by metallicities. This is calculated as

    \[P_j = \frac{ \sum_k r_{j,k} \, [\text{M} / \text{H}]_k}{\sum_{j,k} r_{j,k} \, [\text{M} / \text{H}]_k}\]

    where $r_{j,k}$ are the elements of coeffs where $j$ indexes over unique entries in logAge and $k$ indexes over unique entries in metallicities. This is the same nomenclature used in the the documentation on constrained metallicity evolutions.

    Examples

    julia> mdf_amr([1.0, 2.0, 1.0], [10, 10, 10], [-2, -1.5, -1])
    -([-2.0, -1.5, -1.0], [0.25, 0.5, 0.25])
    source

    Photometric Error and Completeness Models

    StarFormationHistories.Martin2016_completeFunction
    η(m) = Martin2016_complete(m, A, m50, ρ)

    Completeness model of Martin et al. 2016 implemented as their Equation 7:

    \[\eta(m) = \frac{A}{1 + \text{exp} \left( \frac{m - m_{50}}{\rho} \right)}\]

    m is the magnitude of interest, A is the maximum completeness, m50 is the magnitude at which the data are 50% complete, and ρ is an effective slope modifier.

    source
    StarFormationHistories.exp_photerrFunction
    exp_photerr(m, a, b, c, d)

    Exponential model for photometric errors of the form

    \[\sigma(m) = a^{b \times \left( m-c \right)} + d\]

    Reported values for some HST data were a=1.05, b=10.0, c=32.0, d=0.01.

    source
    diff --git a/previews/PR33/index.html b/previews/PR33/index.html deleted file mode 100644 index 51f396f..0000000 --- a/previews/PR33/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Overview · StarFormationHistories.jl

    Overview

    This package enables many different kinds of analysis related to astrophysical star formation histories (SFHs). Core among these functionalities are generation of mock color-magnitude diagrams (CMDs) from input SFHs and fitting of SFHs from observed CMDs. The methods of this package have been designed to be simple to use but easy to extend. It is recommended that you use this package in conjunction with InitialMassFunctions.jl which provides implementations of the most popular stellar initial mass functions as new types which are natively supported by this package's methods.

    diff --git a/previews/PR33/objects.inv b/previews/PR33/objects.inv deleted file mode 100644 index a56500ca8ad6bbb916754720feb9a2bdd1ddb0bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658 zcmV-=28H<}AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkYbYXHv zZ*py6bZKvHNNIC)Z*pm6b1rIZ3L_v^WpZMd? zav*PJAarPHb0B7EY-J#6b0A}HZE$jBb8}^6Aa!$TZf78RY-wUH3V58YS>1A+HWa?+ zDbz{#Qr*~@X+6H_*lX`NGu|ZQb^mh1XhDE#Ks%Cf*17FP`#SA|r0>ut=|O-HEbOw7 zizGzoe3CwW=Q{_Rr9Ryusr*ZydkCK)^!}NOXGT9c0aJ>l;k^9UWvLR}p4vHKj;@LK z6bhcDJ|ghvktW-iD2f(5l}couVmvkAS?cLw!cyvYfj1`1(H#pTd{3Wgj8;@d+?Oce z0{zs0Sr)Nokr+maa7iM%R;b_3(Y<~~S0Tj!PvV$)Oue873Ma6)9rLgku6PAlJS2jt zC}G}lz<}+j-v?=4&f#eA*b65O9^3^LDT!qlo_RS(H#wDjO9gsc4LWp3;L2ztv>KbE z+w#egEXnl6TGOhrIa(J_upC@`%mrSNFl8$9DY{`K6eN+(hNZwzbD?T%j#gQ$7+x#5 zkM)aG6apd|!&V#f%OOyPen3kQOhE-q07PViTyR$7BN%>$uie z-=ZqSTI)l^6;G%V%)_@rz;QwPc)@d~6ium=c*T7hx4^5-1E__7G=feZ8vzvv&Wh}S z+XUaUCmOSeb05FoDweR%S_9qNZ>ABfSE8UA1=%Rh2M&}A1}CYGdx=+z)nX9*e(>zg zRS|Ap85%E9{=zZ(kea*uEMX~^OjY{mBCU?mY}qjmFMX^T3_-@=Dk2Fsn_^R_B=zA~ zlT4kpxRtfoWNr64b=Jcg$MXIPzvGHxp5iMZ$O~R_kr0j32X1>dEO3Q#00f8D0H_9V zYJ+rHF2{tX>Ht5Mp91dNMuhWzBY}PWOk#W+1k_Wl^BWJz@5-Kz%IQv0Q{dW`&?yl! zHy6d*A^Wd09anxjki&f zrlM7wd(-l$I*ObeROaip1($6LhPDMa+7`S#q_sWQIjIw>>!1OyD`B3cx)wGndZ(s_ zRP`GgFc=$_U#9$4XBePFQ-8}C=a>iVwFZq2$3&PO2SQAjW0{|%-cZ*&)<@njsYvRT zwQkKmA1HEWuJ#l?*I8>LKFtq`m`*$BD)x(rq_BM+;GaR?WD}R0y_?hn9764C4T|}Q z2guCVG{Ai4t0eKD^ldb%2Fi6~}dJJC?QC?fLBDVs`OE6Rw}es_3}8*KXnmJqtI@q8AOc`6x&#!Pk@3 z&GO$r9;gJJ<)G?iOM3u^fz1}n*~Oa@uy+TmyYaVpwaInjsp~vVUi8O{wR1apdLg33 zbEP)o>12lR5hZeggPRKJCL|oAtQL!dF62-~Gv%7b#*H^YC^wTcuOysE`H;Ukm2{Zo zdP!f-babb^XRCgs(T8Mx-wZJ(PJ=*B7s4JQX{Qg+@-Rf=xA@BHg)hC>o za(3C6eExRv8?U17>UU65e%Y+La0^+SwN){M#x{hjxLb{lfU_NY`PggN!};ASB(ipBv+rH6{ITVTjTLQQ zUYQ_a5Vm zTlDpe{sBG&c~W#c9|#jC+wOi#=$gVgMto(fD)k3o3t-TOpa!H~z9B*5Pn3nxo;RF& zX||#!cTQG2KDo*1aM5Yx7gm^?;&zN70y!PZ9`v=Ui1*|s#jkg!H_g_K4bPDO0X$XO ED-OyhumAu6 diff --git a/previews/PR33/search_index.js b/previews/PR33/search_index.js deleted file mode 100644 index 6f4ecaf..0000000 --- a/previews/PR33/search_index.js +++ /dev/null @@ -1,3 +0,0 @@ -var documenterSearchIndex = {"docs": -[{"location":"fitting/fitting_intro/#fitting","page":"Background and Template Construction","title":"Background and Template Construction","text":"","category":"section"},{"location":"fitting/fitting_intro/#Background","page":"Background and Template Construction","title":"Background","text":"","category":"section"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"In the classic formulation of star formation history fitting from resolved-star photometry (Dolphin 2002), an observed color-magnitude diagram (CMD) is binned into a 2-D histogram known as a Hess diagram. Such a CMD and Hess diagram pair is shown below.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"(Image: Comparison of CMD and a Hess diagram generated from the same observational data.)","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"The representation of the observations as a Hess diagram allows one to apply Poisson statistics, specifically the Poisson likelihood ratio (Equations 7–10 in Dolphin 2002), to model the observations. As the CMD of a complex stellar population is simply the sum of the CMDs of its sub-populations, one need only prepare a number of templates for each simple stellar population (SSP) which may make up the complex population in question and model the observed Hess diagram as a linear combination of these templates. Keeping the same notation as Dolphin 2002 (Equation 1), the complex model Hess diagram is simply","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"m_i = sum_j r_j c_ij","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"where m_i is the value of the complex model in bin i, c_ij is the value of simple template j in bin i, and r_j is the multiplicative coefficient determining how significant template j is to the complex population. In Dolphin 2002, he normalizes the templates to identical star formation rates (SFRs) and so the r_j are SFRs as well. In this package, we prefer to normalize our templates to identical population stellar masses, so our r_j are stellar masses, but the principal is the same.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"Construction of the templates is, however, not a trivial exercise. Ideally, a template constructed to represent a particular SSP would accurately reflect the expectation of how such a population would be observed. Thus, these templates must be adjusted for photometric error, incompleteness, and other effects such as those caused by unresolved binary- and multi-star systems. Observational effects such as photometric error and incompleteness are best measured from artificial star tests (ASTs). It is worth mentioning that ASTs can often return \"best case\" results, as they typically neglect systematics like uncertainty in the point-spread model used for the photometry; as such it is sometimes necessary to add a systematic error floor to photometric error results from ASTs.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"Such templates can be constructed by sampling many mock stars from an initial mass function (IMF), interpolating their absolute magnitudes from an isochrone of the relevant SSP, and \"mock observing\" them by applying photometric error and completeness functions (for example, by looking up the 1sigma photometric error and completeness value from a catalog of artificial stars). Such Monte Carlo templates can be slow to construct and exhibit Poisson shot-noise, requiring a statistical data–data comparison rather than a model–data comparison. Thus this method is non-optimal from both a practical and statistical perspective.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"It is better to form what Dolphin 2002 calls a \"blurred isochrone;\" in this form of template, the SSP isochrone is first interpolated in initial stellar mass to improve the point density along the isochrone. The number of interpolated points is generally a function of the size of the bins in the Hess diagram and the observational error; more points are required as the bin size or photometric errors become smaller. These points are then weighted according to the IMF and the photometric completeness, and this weight is distributed into the Hess diagram following the photometric error distribution determined by similar artificial stars. Dolphin 2002 also mentions interpolating across stellar age/metallicity when constructing such templates; for example, for an SSP with an age of 1 Gyr and a metallicity of [M/H]=-1.0, you could interpolate the isochrones to introduce a Gaussian metallicity spread of 0.05 dex or an age spread of 100 Myr. The general effects of this form of interpolation is to broaden the model templates, particularly features that are very sharp in true SSP models. We neglect this form of interpolation in our implementation as it adds significant complexity and requires users to provide more information about the isochrones that are providing. Such widening of the individual templates is most impactful when photometric errors in the observational data are low (perhaps <0.10 mag).","category":"page"},{"location":"fitting/fitting_intro/#templates","page":"Background and Template Construction","title":"Constructing Templates","text":"","category":"section"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"While the above description summarizes the necessary components for constructing such a blurred isochrone, it can be a bit difficult to figure out how best to actually construct them. Specifically there are many ways that one could implement the observational effects of photometric error and incompleteness. We provide a method partial_cmd_smooth to construct such templates under the assumption of Gaussian photometric error distributions, which is often a good approximation in the high-completeness regime. This method makes use of user-defined functions for the mean photometric error and completeness as a function of magnitude and filter, such that these can be defined in a number of ways; for example, as direct lookups from a large table of ASTs or as simple function evaluations of analytic approximations or fits to the ASTs.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"This method begins by interpolating the provided SSP isochrone to increase point density. For every such point with i band apparent magnitude m_i, it calls a user-defined function to estimate the 1sigma photometric error as sigma_i = f_i(m_i). The photometric error on the x-axis color for the Hess diagram is estimated from the individual-band sigma_i. These errors are used to define an asymmetric Gaussian kernel for each point in the interpolated isochrone. This kernel describes the shape of the probability distribution for where in the Hess diagram the isochrone point would be observed. However, it also must be normalized (weighted) according to the IMF and observational completeness functions.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"Assume that the vector of initial stellar masses for the points in the interpolated isochrone are m_i and that they are sorted such that m_i m_i+1. The IMF weight on point m_i can be approximated as the number fraction of stars born between m_i and m_i+1 divided by the mean mass per star born langle m rangle, such that the weight effectively represents the number of stars expected to be born with masses between m_i and m_i+1 per solar mass of star formation:","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"beginaligned\nw_itextIMF = frac int_0^m_i+1 fracdN(m)dm dm - int_0^m_i fracdN(m)dm dm int_0^infty m times fracdN(m)dm dm = frac int_m_i^m_i+1 fracdN(m)dm dm langle m rangle\nendaligned","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"The numerator can either be calculated as the difference in the cumulative distribution function across the bin or approximated efficiently via the trapezoidal rule. The denominator is a function only of the IMF and need only be calculated once. Multiplying this weight by the probability of detection in the relevant bands gives the final weight.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"Below we show a comparison of a smooth Hess diagram template constructed with partial_cmd_smooth with a Monte Carlo realization created with generate_stars_mass and mock-observed with model_cmd. These use an SSP isochrone of age 10 Gyr and metallicity [M/H] of -2 from PARSEC with identical observational error and completeness models. For the provided stellar mass of 10^7 textM_odot, the Monte Carlo model is fairly well-sampled but still noticably noisy in regions of the Hess diagram that are less well-populated. ","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"(Image: Comparison of smooth Hess diagram template from `partial_cmd_smooth` and a Monte Carlo model made with `generate_stars_mass`.)","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"partial_cmd_smooth","category":"page"},{"location":"fitting/fitting_intro/#StarFormationHistories.partial_cmd_smooth","page":"Background and Template Construction","title":"StarFormationHistories.partial_cmd_smooth","text":"result::StatsBase.Histogram = partial_cmd_smooth( m_ini::AbstractVector{<:Number}, mags::AbstractVector{<:AbstractVector{<:Number}}, mag_err_funcs, y_index, color_indices, imf, completeness_funcs=[one for i in mags]; dmod::Number=0, normalize_value::Number=1, mean_mass=mean(imf), edges=nothing, xlim=nothing, ylim=nothing, nbins=nothing, xwidth=nothing, ywidth=nothing )\n\nMain function for generating template Hess diagrams from a simple stellar population of stars from an isochrone, including photometric error and completeness.\n\nArguments\n\nm_ini::AbstractVector{<:Number} is a vector containing the initial stellar masses of the stars from the isochrone.\nmags::AbstractVector{<:AbstractVector{<:Number}} is a vector of vectors. Each constituent vector with index i should have length(mags[i]) == length(m_ini), representing the magnitudes of the isochrone stars in each of the magnitudes considered. In most cases, mags should contain 2 (if y-axis mag is also involved in the x-axis color) or 3 vectors.\nmag_err_funcs must be an indexable object (e.g., a vector or tuple) that contains callables (e.g., a Function) to compute the 1σ photometric errors in the filters provided in mags. Each callable must take a single argument and return a Number. The length mag_err_funcs must be equal to the length of mags.\ny_index gives a valid index (e.g., an Int or CartesianIndex) into mags for the filter you want to have on the y-axis of the Hess diagram. For example, if the mags argument contains the B and V band magnitudes as mags=[B, V] and you want V on the y-axis, you would set y_index as 2. \ncolor_indices is a length-2 indexable object giving the indices into mags that are to be used to compute the x-axis color. For example, if the mags argument contains the B and V band magnitudes as mags=[B, V], and you want B-V to be the x-axis color, then color_indices should be [1,2] or (1,2) or similar.\nimf is a callable that takes an initial stellar mass as its sole argument and returns the (properly normalized) probability density of your initial mass function model. All the models from InitialMassFunctions.jl are valid for imf.\ncompleteness_functions must be an indexable object (e.g., a vector or tuple) that contains callables (e.g., a Function) to compute the single-filter completeness fractions as a function of magnitude. Each callable in this argument must correspond to the matching filter provided in mags.\n\nKeyword Arguments\n\ndmod::Number=0 distance modulus in magnitudes to apply to the input mags.\nnormalize_value::Number=1 gives the total stellar mass of the population you wish to model.\nmean_mass::Number gives the expectation value for a random star drawn from your provided imf. This will be computed for you if your provided imf is a valid continuous, univariate Distributions.Distribution object.\nedges is a tuple of vector-like objects defining the left-side edges of the bins along the x-axis (edges[1]) and the y-axis (edges[2]). Example: (-1.0:0.1:1.5, 22:0.1:27.2). If edges is provided, it overrides the following keyword arguments that offer other ways to specify the extent of the Hess diagram.\nxlim; a length-2 indexable object (e.g., a vector or tuple) giving the lower and upper bounds on the x-axis corresponding to the provided colors array. Example: [-1.0, 1.5]. This is only used if edges is not provided. \nylim; as xlim but for the y-axis corresponding to the provided mags array. Example [25.0, 20.0]. This is only used if edges is not provided.\nnbins::NTuple{2,<:Integer} is a 2-tuple of integers providing the number of bins to use along the x- and y-axes. This is only used if edges is not provided.\nxwidth; the bin width along the x-axis for the colors array. This is only used if edges and nbins are not provided. Example: 0.1. \nywidth; as xwidth but for the y-axis corresponding to the provided mags array. Example: 0.1.\n\nReturns\n\nThis method returns the Hess diagram as a StatsBase.Histogram; you should refer to the StatsBase documentation for more information. In short, if the output of this method is result, then the Hess diagram represented as a Matrix is available as result.weights (this is what you would want for fit_templates and similar functions) and the edges of the histogram are available as result.edges.\n\n\n\n\n\n","category":"function"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"We note that in many cases it can also be helpful to add in a foreground/background template that models contamination of the Hess diagram from stars not in your population of interest – this is often done using observations of parallel fields though there are several other possible methods.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"Photometric catalogs can be processed into Hess diagrams meeting our formatting requirements with the method bin_cmd.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"StarFormationHistories.bin_cmd","category":"page"},{"location":"fitting/fitting_intro/#StarFormationHistories.bin_cmd","page":"Background and Template Construction","title":"StarFormationHistories.bin_cmd","text":"result::StatsBase.Histogram =\n bin_cmd( colors::AbstractVector{<:Number},\n mags::AbstractVector{<:Number};\n weights::AbstractVector{<:Number} = ones(promote_type(eltype(colors),\n eltype(mags)), size(colors)),\n edges = nothing,\n xlim = extrema(colors),\n ylim = extrema(mags),\n nbins = nothing,\n xwidth = nothing,\n ywidth = nothing)\n\nReturns a StatsBase.Histogram type containing the Hess diagram from the provided x-axis photometric colors and y-axis photometric magnitudes mags. These must all be vectors equal in length. You can either specify the bin edges directly via the edges keyword (e.g., edges = (range(-0.5, 1.6, length=100), range(17.0, 26.0, length=100))), or you can set the x- and y-limits via xlim and ylim and the number of bins as nbins, or you can omit nbins and instead pass the bin width in the x and y directions, xwidth and ywidth. See below for more info on the keyword arguments. To plot this with PyPlot you should do plt.imshow(result.weights', origin=\"lower\", ...).\n\nKeyword Arguments\n\nweights::AbstractVector{<:Number} is a array of length equal to colors and mags that contains the probabilistic weights associated with each point. This is passed to StatsBase.fit as StatsBase.Weights(weights).\n\nThe following keyword arguments are passed to StarFormationHistories.calculate_edges to determine the bin edges of the histogram.\n\nedges is a tuple of vector-like objects defining the left-side edges of the bins along the x-axis (edges[1]) and the y-axis (edges[2]). Example: (-1.0:0.1:1.5, 22:0.1:27.2). If edges is provided, weights is the only other keyword that will be read; edges supercedes the other construction methods. \nxlim; a length-2 indexable object (e.g., a vector or tuple) giving the lower and upper bounds on the x-axis corresponding to the provided colors array. Example: [-1.0, 1.5]. This is only used if edges is not provided. \nylim; as xlim but for the y-axis corresponding to the provided mags array. Example [25.0, 20.0]. This is only used if edges is not provided.\nnbins::NTuple{2,<:Integer} is a 2-tuple of integers providing the number of bins to use along the x- and y-axes. This is only used if edges is not provided.\nxwidth; the bin width along the x-axis for the colors array. This is only used if edges and nbins are not provided. Example: 0.1. \nywidth; as xwidth but for the y-axis corresponding to the provided mags array. Example: 0.1.\n\n\n\n\n\n","category":"function"},{"location":"fitting/fitting_intro/#A-Note-on-Array-Formatting","page":"Background and Template Construction","title":"A Note on Array Formatting","text":"","category":"section"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"It is expected that the user will typically have model templates stored as two-dimensional matrices as these are the obvious choice for representing a binned two-dimensional histogram. We fully support supplying the list of model templates as a list of matrices (e.g., a Vector{Matrix{<:Number}}) to the fitting functions discussed below. The important computational kernels composite! and ∇loglikelihood! have custom loops for these input types.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"However, additional optimizations are possible by flattening the data. By flattening each matrix in the list of model templates into a column vector and concatenating them such that the list of model templates becomes a single matrix, we can compute the complex model Hess diagram as a single matrix-vector product rather than using a custom loop. The same optimization can be made when computing the gradient of the loglikelihood (discussed more below). The majority of all computation for the fitting methods below is spent in these two functions, so optimizing their performance translates directly to improved fitting runtimes. With this flattened memory arrangement we can use the highly optimized LinearAlgbera.mul! method to do the in-place matrix-vector product. This will typically be translated into a call to a BLAS function like gemv!. As such, we can benefit from Julia's ability to switch BLAS implementations at runtime to use Intel's Math Kernel Library, Apple's Accelerate, and others.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"Most of the fitting methods below support both the natural and flattened data layouts. We provide the stack_models method to produce the optimized layout for the list of model templates.","category":"page"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"StarFormationHistories.stack_models","category":"page"},{"location":"fitting/fitting_intro/#StarFormationHistories.stack_models","page":"Background and Template Construction","title":"StarFormationHistories.stack_models","text":"stack_models(models::AbstractVector{<:AbstractMatrix{<:Number}}) = reduce(hcat,map(vec,models))\n\nTransforms a vector of matrices into a single matrix, with each matrix from models being transcribed into a single column in the output matrix. This data layout enables more efficient calculations in some of our internal functions like composite! and ∇loglikelihood!.\n\nExamples\n\njulia> stack_models([rand(5,5) for i in 1:10])\n25×10 Matrix{Float64}:\n...\n\n\n\n\n\n","category":"function"},{"location":"fitting/fitting_intro/#A-Note-on-Threading","page":"Background and Template Construction","title":"A Note on Threading","text":"","category":"section"},{"location":"fitting/fitting_intro/","page":"Background and Template Construction","title":"Background and Template Construction","text":"While generally the methods using BLAS routines offer significant performance improvements, there is a caveat when multithreading from within Julia. By default Julia will allow BLAS to use multiple threads even if Julia itself is started with a single thread (i.e., by running julia -t 1). BLAS threads do not compose with Julia threads. That is, if you start Julia with N>1 threads (julia -t N) and write a threaded workload where each Julia thread is doing BLAS operations concurrently, you can easily oversubscribe the CPU. Specific recommendations vary depending on BLAS vendor (see this page and the linked discourse threads), but generally this package is in the regime of doing many small calculations that do not individually benefit much from BLAS threading (e.g., performance for OpenBLAS with 8 threads is only ~2x the 1 thread performance). As such it is often sufficient to set BLAS to use a single thread (via LinearAlgbera.BLAS.set_num_threads(1) or environment variables; see above link).","category":"page"},{"location":"doc_index/#index","page":"Index","title":"Index","text":"","category":"section"},{"location":"doc_index/","page":"Index","title":"Index","text":"Modules = [StarFormationHistories]\nPages = [\"binaries.md\",\"fitting.md\",\"helpers.md\",\"index.md\",\"simulate.md\"]","category":"page"},{"location":"fitting/fixed_amr/#Fixed-Age-Metallicity-Relations","page":"Fixed Age-Metallicity Relations","title":"Fixed Age-Metallicity Relations","text":"","category":"section"},{"location":"fitting/fixed_amr/","page":"Fixed Age-Metallicity Relations","title":"Fixed Age-Metallicity Relations","text":"It is often the case that one may want to fit for star formation rates under a fixed age-metallicity relation or other metallicity evolution model with no degrees of freedom. Such functionality is provided by fixed_amr, which takes as input the relative weights (relweights in the function call, equivalently the r_jk in the above derivation) on each template due to a predetermined metallicity model and fits only the per-age-bin coefficients (R_j in the above derivation). ","category":"page"},{"location":"fitting/fixed_amr/","page":"Fixed Age-Metallicity Relations","title":"Fixed Age-Metallicity Relations","text":"StarFormationHistories.fixed_amr","category":"page"},{"location":"fitting/fixed_amr/#StarFormationHistories.fixed_amr","page":"Fixed Age-Metallicity Relations","title":"StarFormationHistories.fixed_amr","text":"fixed_amr(models::AbstractVector{T},\n data::AbstractMatrix{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n relweights::AbstractVector{<:Number};\n relweightsmin::Number=0, \n x0=construct_x0_mdf(logAge, convert(S,13.7)),\n kws...) where {S <: Number, T <: AbstractMatrix{S}}\nfixed_amr(models::AbstractMatrix{S},\n data::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n relweights::AbstractVector{<:Number};\n relweightsmin::Number=0,\n x0=construct_x0_mdf(logAge, convert(S,13.7)),\n kws...) where S <: Number\n\nMethod that fits a linear combination of the provided Hess diagrams models to the observed Hess diagram data, under an externally-imposed age-metallicity relation (AMR) and/or metallicity distribution function (MDF). As such, a number of coefficients equal to length(unique(logAge)) are returned; that is, only one coefficient is derived per unique entry in logAge.\n\nThe second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\nArguments\n\nmodels::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.\ndata::AbstractMatrix{<:Number} is the Hess diagram for the observed data.\nlogAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.\nmetallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This is most commonly a logarithmic abundance like [M/H] or [Fe/H], but you could use a linear abundance like the metal mass fraction Z if you wanted to. There are some notes on the Wikipedia that might be useful.\nrelweights::AbstractVector{<:Number} is a vector of length equal to that of models which contains the relative weights to apply to each model Hess diagram resulting from an externally-imposed age-metallicity relation and/or metallicity distribution function. Additional details on how to create these weights is provided in the notes below and in the online documentation.\n\nKeyword Arguments\n\nrelweightsmin truncates the input list of models based on the provided relweights, providing a speedup at the cost of precision by removing models that contribute least to the overall composite model. By default, no truncation of the input is performed and all provided models are used in the fit. We recommend this only be increased when fitting performance begins to impact workflow (e.g., when running massive Monte Carlo experiments). See StarFormationHistories.truncate_relweights for implementation details. \nx0 is the vector of initial guesses for the stellar mass coefficients per unique entry in logAge. You should basically always be calculating and passing this keyword argument. We provide StarFormationHistories.construct_x0_mdf to prepare x0 assuming constant star formation rate, which is typically a good initial guess. \n\nOther kws... are passed to Optim.options to set things like convergence criteria for the optimization.\n\nNotes\n\nAll metallicity-related weighting of the models is assumed to be captured in the provided relweights vector, which has the same length as the logAge, metallicities, and models vectors. Each entry in relweights is assumed to be a relative weight for the corresponding model. For example, for the model Hess diagram models[i], with log10(age [yr]) = logAge[i] and metallicity metallicities[i], the relative weight due to the model's age and metallicity w(logAge[i], metallicities[i]) is assumed to be relweights[i]. The sum of all relweights for each unique entry in logAge should be 1; i.e., the following condition should be met: all( sum(relweights[logAge .== la]) ≈ 1 for la in unique(logAge)). If this is not the case, this function will issue a warning and attempt to renormalize relweights by mutating the vector in place. More information on preparation of the relweights for input to this method is provided in our online documentation. \nThis function is designed to work best with a \"grid\" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.\n\n\n\n\n\n","category":"function"},{"location":"fitting/linear_amr/#linear_amr_section","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"","category":"section"},{"location":"fitting/linear_amr/#metal_evo_intro","page":"Linear Age-Metallicity Relation","title":"Why Should Metallicity Evolutions Be Constrained?","text":"","category":"section"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"While the above methods work well for optimizing the per-template r_j as a means for fitting SFHs, these methods can produce metallicity evolutions that could be considered unphysical, with large changes in the mean metallicity over small changes in time. An example of this type of behavior is shown in the SFH fit below.","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"(Image: Example of a SFH fit with variations in the metallicity evolution.)","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"While some metallicity variation in the star-forming gas is to be expected, these variations in the SFH fit can end up being quite large depending on the data and isochrone grid adopted. A solution is to construct a more physically-motivated model.","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"We can do this using a hierarchical model with a parameterized metallicity distribution function (MDF) where the the r_j are not the parameters directly optimized. Rather, we can optimize one stellar mass (or star formation rate) parameter per age bin, and then a number of MDF parameters that determine how that stellar mass is split between models with different metallicities at fixed age. An example for one such MDF model is a linear mean metallicity relation langle textMtextH rangle (t) = alpha left( T_textmax - t right) + beta with a Gaussian distribution in metallicity at fixed age. T_textmax here is the earliest lookback time under consideration such that langle textMtextH rangle (T_textmax) = beta. If the per-age-bin stellar mass coefficients are R_j, the age of the stellar population j is t_j, and the metallicity of population k is textMtextH_k, then we can write the per-model r_jk (where we are now using separate indices for age and metallicity) as","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nmu_j = alpha left( T_textmax - t_j right) + beta \nr_jk = R_j frac textexp left( - left( frac textMtextH_k - mu_jsigma right)^2 right)sum_k textexp left( - left( frac textMtextH_k - mu_jsigma right)^2 right)\nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"where the numerator is the MDF at fixed age evaluated at metallicity textMtextH_k and the denominator is a normalizing coefficient that ensures sum_k r_jk = R_j. In this notation, bin i of the complex model Hess diagram (equation 1 of Dolphin 2002) is","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"m_i = sum_jk r_jk c_ijk","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"Below we show a fit using this hierarchical model to the same data as above. ","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"(Image: Example of a SFH fit with a linear metallicity evolution.)","category":"page"},{"location":"fitting/linear_amr/#Fitting-Functions","page":"Linear Age-Metallicity Relation","title":"Fitting Functions","text":"","category":"section"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"We provide the method StarFormationHistories.fit_templates_mdf to fit this model to an observed Hess diagram.","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"StarFormationHistories.fit_templates_mdf\nStarFormationHistories.LogTransformMDFσResult\nStarFormationHistories.LogTransformMDFResult","category":"page"},{"location":"fitting/linear_amr/#StarFormationHistories.fit_templates_mdf","page":"Linear Age-Metallicity Relation","title":"StarFormationHistories.fit_templates_mdf","text":"fit_templates_mdf(models::AbstractVector{<:AbstractMatrix{S}},\n data::AbstractMatrix{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number\n [, σ::Number];\n x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),\n [0.05, -2.0, 0.2]),\n kws...) where {S <: Number}\nfit_templates_mdf(models::AbstractMatrix{S},\n data::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number\n [, σ::Number];\n x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),\n [0.05, -2.0, 0.2]),\n kws...) where {S <: Number}\n\nMethod that fits a linear combination of the provided Hess diagrams models to the observed Hess diagram data, constrained to have a linear age-metallicity relation with the mean metallicity of element i of unique(logAge) being μ[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. α is therefore a slope in the units of metallicities per Gyr, and β is the mean metallicity value of stars being born at a lookback time of T_max, which has units of Gyr. Individual weights for each isochrone template are then determined via Gaussian weighting with the above mean and the standard deviation σ, which can either be fixed or fit.\n\nThis function is designed to work best with a \"grid\" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.\n\nThe second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\nArguments\n\nmodels are the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram. \ndata is the Hess diagram for the observed data. \nlogAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.\nmetallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This is most commonly a logarithmic abundance like [M/H] or [Fe/H], but you could use a linear abundance like the metal mass fraction Z if you wanted to. There are some notes on the Wikipedia that might be useful.\nT_max::Number is the time at which the age-metallicity relation has a value of \beta in Gyr. For example, if the oldest stellar populations in your isochrone grid are 12 Gyr old, you could set T_max = 12.0. \n\nOptional Arguments\n\nIf provided, σ::Number is the fixed width of the Gaussian the defines the metallicity distribution function (MDF) at fixed logAge. If this argument is omitted, σ will be a free parameter in the fit. \n\nKeyword Arguments\n\nx0 is the vector of initial guesses for the stellar mass coefficients per unique entry in logAge, plus the variables that define the metallicity evolution model. You should basically always be calculating and passing this keyword argument. We provide StarFormationHistories.construct_x0_mdf to prepare the first part of x0 assuming constant star formation rate, which is typically a good initial guess. You then have to concatenate that result with an initial guess for the metallicity evolution parameters. For example, x0=vcat(construct_x0_mdf(logAge, 13.7; normalize_value=1e4), [0.05,-2.0,0.2]), where logAge is a valid argument for this function (see above), and the initial guesses on the parameters are [α, β, σ] = [0.05, -2.0, 0.2]. If the provided metallicities are, for example, [M/H] values, then this mean metallicity evolution is μ(t) [dex] = 0.05 [dex/Gyr] * (T_max - t) [Gyr] - 2.0 [dex], and at fixed time, the metallicity distribution function is Gaussian with mean μ(t) and standard deviation σ. If you provide σ as an optional argument, then you should not include an entry for it in x0.\nOther kws... are passed to Optim.options to set things like convergence criteria for the optimization.\n\nReturns\n\nThis function returns an object (say, result) of similar structure to the object returned by fit_templates. Specifically, this method will return a NamedTuple with entries result.mle and result.map for the maximum likelihood and maximum a posteriori estimates, respectively. If you provide a fixed σ, those objects will be instances of StarFormationHistories.LogTransformMDFσResult. If you allow σ to be freely fit, those objects will be instances of StarFormationHistories.LogTransformMDFResult. Both of these types support sampling via, e.g., rand(result.map, 10). \n\nNotes\n\nα and σ are optimized under a logarithmic transformation, so they are constrained to be positive. β is not and may be negative. This method also uses the BFGS method from Optim.jl internally just like fit_templates; please see the notes section of that method. \n\n\n\n\n\n","category":"function"},{"location":"fitting/linear_amr/#StarFormationHistories.LogTransformMDFσResult","page":"Linear Age-Metallicity Relation","title":"StarFormationHistories.LogTransformMDFσResult","text":"LogTransformMDFσResult(μ::AbstractVector{<:Number},\n σ::AbstractVector{<:Number},\n invH::AbstractMatrix{<:Number},\n result)\n\nType for containing the maximum likelihood estimate (MLE) and maximum a posteriori (MAP) results from fit_templates_mdf for fixed σ. The fitted coefficients are available in the μ field. Estimates of the standard errors are available in the σ field. These have both been transformed from the native logarithmic fitting space into natural units (i.e., stellar mass or star formation rate). The linear age-metallicity relation parameters α (slope [dex/Gyr]) and β (intercept at T_max [dex]) are available in the second-to-last and last elements of μ and σ, respectively. \n\ninvH contains the estimated inverse Hessian of the likelihood / posterior at the maximum point in the logarithmic fitting units. result is the full result object returned by the optimization routine.\n\nThis type is implemented as a subtype of Distributions.Sampleable{Multivariate, Continuous} to enable sampling from an estimate of the likelihood / posterior distribution. We approximate the distribution as a multivariate Gaussian in the native (logarithmically transformed) fitting variables with covariance matrix invH and means log.(μ). We find this approximation is good for the MAP result but less robust for the MLE. You can obtain N::Integer samples from the distribution by rand(R, N) where R is an instance of this type; this will return a size (length(μ)+2) x N matrix, or fail if invH is not positive definite.\n\nExamples\n\njulia> result = fit_templates_mdf(models, data, model_logAge, model_MH, 0.3);\n\njulia> typeof(result.map)\nStarFormationHistories.LogTransformMDFσResult{...}\n\njulia> size(rand(result.map, 3)) == (length(models)+2,3)\ntrue\n\n\n\n\n\n","category":"type"},{"location":"fitting/linear_amr/#StarFormationHistories.LogTransformMDFResult","page":"Linear Age-Metallicity Relation","title":"StarFormationHistories.LogTransformMDFResult","text":"LogTransformMDFResult(μ::AbstractVector{<:Number},\n σ::AbstractVector{<:Number},\n invH::AbstractMatrix{<:Number},\n result)\n\nType for containing the maximum likelihood estimate (MLE) and maximum a posteriori (MAP) results from fit_templates_mdf when freely fitting σ. The fitted coefficients are available in the μ field. Estimates of the standard errors are available in the σ field. These have both been transformed from the native logarithmic fitting space into natural units (i.e., stellar mass or star formation rate). The linear age-metallicity relation parameters α (slope [dex/Gyr]) and β (intercept at T_max [dex]) are available in the third-to-last and second-to-last elements of μ and σ, respectively. The static Gaussian width of the MDF at fixed age is provided in the last element of μ and σ. \n\ninvH contains the estimated inverse Hessian of the likelihood / posterior at the maximum point in the logarithmic fitting units. result is the full result object returned by the optimization routine.\n\nThis type is implemented as a subtype of Distributions.Sampleable{Multivariate, Continuous} to enable sampling from an estimate of the likelihood / posterior distribution. We approximate the distribution as a multivariate Gaussian in the native (logarithmically transformed) fitting variables with covariance matrix invH and means log.(μ). We find this approximation is good for the MAP result but less robust for the MLE. You can obtain N::Integer samples from the distribution by rand(R, N) where R is an instance of this type; this will return a size (length(μ)+3) x N matrix, or fail if invH is not positive definite.\n\nExamples\n\njulia> result = fit_templates_mdf(models, data, model_logAge, model_MH);\n\njulia> typeof(result.map)\nStarFormationHistories.LogTransformMDFσResult{...}\n\njulia> size(rand(result.map, 3)) == (length(models)+3,3)\ntrue\n\n\n\n\n\n","category":"type"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"The method StarFormationHistories.construct_x0_mdf can be used to construct the stellar mass components R_j of the initial guess vector x0","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"StarFormationHistories.construct_x0_mdf","category":"page"},{"location":"fitting/linear_amr/#StarFormationHistories.construct_x0_mdf","page":"Linear Age-Metallicity Relation","title":"StarFormationHistories.construct_x0_mdf","text":"x0::Vector = construct_x0_mdf(logAge::AbstractVector{T},\n T_max::Number;\n normalize_value::Number = one(T)) where T <: Number\n\nGenerates a vector of initial stellar mass normalizations for input to StarFormationHistories.fit_templates_mdf or StarFormationHistories.hmc_sample_mdf with a total stellar mass of normalize_value such that the implied star formation rate is constant across the provided logAge vector that contains the log10(Age [yr]) of each isochrone that you are going to input as models. For the purposes of computing the constant star formation rate, the provided logAge are treated as left-bin edges, with the final right-bin edge being T_max, which has units of Gyr. For example, you might have logAge=[6.6, 6.7, 6.8] in which case a final logAge of 6.9 would give equal bin widths. In this case you would set T_max = exp10(6.9) / 1e9 ≈ 0.0079 so that the width of the final bin for the star formation rate calculation has the same log10(Age [yr]) step as the other bins.\n\nThe difference between this function and StarFormationHistories.construct_x0 is that this function generates an x0 vector that is of length length(unique(logage)) (that is, a single normalization factor for each unique entry in logAge) while StarFormationHistories.construct_x0 returns an x0 vector that is of length length(logAge); that is, a normalization factor for every entry in logAge. The order of the coefficients is such that the coefficient x[i] corresponds to the entry unique(logAge)[i]. \n\nNotes\n\nExamples\n\njulia> construct_x0_mdf([9.0,8.0,7.0], 10.0; normalize_value=5.0)\n3-element Vector{Float64}:\n 4.504504504504504\n 0.4504504504504504\n 0.04504504504504504\n\njulia> construct_x0_mdf(repeat([9.0,8.0,7.0,8.0];inner=3), 10.0; normalize_value=5.0)\n3-element Vector{Float64}:\n 4.504504504504504\n 0.4504504504504504\n 0.04504504504504504\n\njulia> construct_x0_mdf(repeat([9.0,8.0,7.0,8.0],3), 10.0; normalize_value=5.0) ≈ construct_x0([9.0,8.0,7.0], 10.0; normalize_value=5.0)\ntrue\n\n\n\n\n\n","category":"function"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"and StarFormationHistories.calculate_coeffs_mdf can be used to calculate per-template stellar mass coefficients (the r_jk above) given the results of a fit (which will be the R_j in the equations above)","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"StarFormationHistories.calculate_coeffs_mdf","category":"page"},{"location":"fitting/linear_amr/#StarFormationHistories.calculate_coeffs_mdf","page":"Linear Age-Metallicity Relation","title":"StarFormationHistories.calculate_coeffs_mdf","text":"calculate_coeffs_mdf(variables::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number\n α::Number,\n β::Number,\n σ::Number,)\ncalculate_coeffs_mdf(variables::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number)\n\nCalculates per-model stellar mass coefficients coeffs from the fitting parameters of StarFormationHistories.fit_templates_mdf and StarFormationHistories.hmc_sample_mdf. The variables returned by these functions is of length length(unique(logAge))+3. The first length(logAge) entries are stellar mass coefficients, one per unique entry in logAge. The final three elements are α, β, and σ defining a metallicity evolution such that the mean for element i of unique(logAge) is μ[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. The individual weights per each isochrone are then determined via Gaussian weighting with the above mean and the provided σ. The second call signature can be used on samples that include α, β, and σ.\n\nExamples\n\njulia> calculate_coeffs_mdf([1,1], [7,7,8,8], [-2,-1,-2,-1], 12, 0.05, -2.0, 0.2) ≈ [ 0.07673913563377144, 0.9232608643662287, 0.08509904500701986, 0.9149009549929802 ]\ntrue\n\n\n\n\n\n","category":"function"},{"location":"fitting/linear_amr/#Sampling-Methods","page":"Linear Age-Metallicity Relation","title":"Sampling Methods","text":"","category":"section"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"We additionally offer a sampling method for this linear age-metallicity relation using HMC:","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"StarFormationHistories.hmc_sample_mdf","category":"page"},{"location":"fitting/linear_amr/#StarFormationHistories.hmc_sample_mdf","page":"Linear Age-Metallicity Relation","title":"StarFormationHistories.hmc_sample_mdf","text":"hmc_sample_mdf(models::AbstractVector{T},\n data::AbstractMatrix{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number,\n nsteps::Integer;\n composite=Matrix{S}(undef,size(data)),\n rng::Random.AbstractRNG=Random.default_rng(),\n kws...) where {S <: Number, T <: AbstractMatrix{S}}\n\nMethod to sample the posterior of the star formation history coefficients constrained to have a linear age-metallicity relation with the mean metallicity of element i of unique(logAge) being μ[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. α is therefore a slope in the units of metallicities per Gyr, and β is the mean metallicity value of stars born at lookback time T_max which has units of Gyr. Individual weights for each isochrone template are then determined via Gaussian weighting with the above mean and the standard deviation σ, which can either be fixed or fit. This method is essentially an analog of StarFormationHistories.fit_templates_mdf that samples the posterior rather than using optimization methods to find the maximum likelihood estimate. This method uses the No-U-Turn sampler as implemented in DynamicHMC.jl, which is a form of dynamic Hamiltonian Monte Carlo.\n\nThis function is designed to work best with a \"grid\" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.\n\nArguments\n\nmodels::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.\ndata::AbstractMatrix{<:Number} is the Hess diagram for the observed data.\nlogAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.\nmetallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This is most commonly a logarithmic abundance like [M/H] or [Fe/H], but you could use a linear abundance like the metal mass fraction Z if you wanted to. There are some notes on the Wikipedia that might be useful.\nT_max::Number is the time at which the age-metallicity relation has a value of \beta in Gyr. For example, if the oldest stellar populations in your isochrone grid are 12 Gyr old, you could set T_max = 12.0. \nnsteps::Integer is the number of samples to draw per chain.\n\nOptional Arguments (NOT YET IMPLEMENTED)\n\nnchains::Integer: If this argument is not provided, this method will return a single chain. If this argument is provided, it will sample nchains chains using all available threads and will return a vector of the individual chains. If nchains is set, composite must be a vector of matrices containing a working matrix for each chain. \n\nKeyword Arguments\n\ncomposite is the working matrix (or vector of matrices, if the argument nchains is provided) that will be used to store the composite Hess diagram model during computation; must be of the same size as the templates contained in models and the observed Hess diagram data.\nrng::Random.AbstractRNG is the random number generator that will be passed to DynamicHMC.jl. If nchains is provided this method will attempt to sample in parallel, requiring a thread-safe rng such as that provided by Random.default_rng(). \n\nAll other keyword arguments kws... will be passed to DynamicHMC.mcmc_with_warmup or DynamicHMC.mcmc_keep_warmup depending on whether nchains is provided.\n\nReturns (NEEDS UPDATED)\n\nIf nchains is not provided, returns a NamedTuple as summarized in DynamicHMC.jl's documentation. In short, the matrix of samples can be extracted and transformed as exp.( result.posterior_matrix ). Statistics about the chain can be obtained with DynamicHMC.Diagnostics.summarize_tree_statistics(result.tree_statistics); you want to see a fairly high acceptance rate (>0.5) and the majority of samples having termination criteria being \"turning.\" See DynamicHMC.jl's documentation for more information.\nIf nchains is provided, returns a vector of length nchains of the same NamedTuples described above. The samples from each chain in the returned vector can be stacked to a single (nsamples, nchains, length(models)) matrix with DynamicHMC.stack_posterior_matrices(result).\n\n\n\n\n\n","category":"function"},{"location":"fitting/linear_amr/#linear_amr_implementation","page":"Linear Age-Metallicity Relation","title":"Implementation","text":"","category":"section"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"While one could optimize the above model without an analytic gradient, such gradient-free methods are typically slower and less robust. One could also calculate the gradient numerically using finite differences or auto-differentiation, but these are still slower than analytic calculations. We will show that the gradient of this hierarchical model is analytic, allowing us to design an efficient optimization scheme.","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"Equation 21 in Dolphin 2001 gives the gradient of our objective function with respect to the underlying coefficients","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nF equiv - textln mathscrL = sum_i m_i - n_i times left( 1 - textln left( fracn_im_i right) right) \nfracpartial Fpartial r_jk = sum_i c_ijk left( 1 - fracn_im_i right)\nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"where c_ijk is the value of template jk in bin i and n_i is bin i of the observed Hess diagram. These partial derivatives are easy to obtain, but we need partials with respect to the per-age-bin fitting parameters R_j. Given the above relation between r_jk and R_j, we can calculate these derivatives as","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nfracpartial Fpartial R_j = sum_k fracpartial Fpartial r_jk fracpartial r_jkpartial R_j \nfracpartial r_jkpartial R_j = frac textexp left( - frac12 left( frac textMtextH_k - mu_jsigma right)^2 right)sum_k textexp left( - frac12 left( frac textMtextH_k - mu_jsigma right)^2 right) = fracr_jkR_j\nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"Then we need only the partial derivatives of the objective function F with respect to the MDF parameters, which in this case are alpha beta sigma. For convenience we will rewrite","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"r_jk = R_j frac textexp left( - frac12 left( frac textMtextH_k - mu_jsigma right)^2 right)sum_k textexp left( - frac12 left( frac textMtextH_k - mu_jsigma right)^2 right) = R_j fracA_jksum_k A_jk","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"as many different types of models can be expressed via this simplified notation by substituting the A_jk with different distributions. This allows us to write ","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nfracpartial Fpartial beta = sum_jk fracpartial Fpartial r_jk fracpartial r_jkpartial beta \nfracpartial r_jkpartial beta = R_j left( frac1sum_k A_jk fracpartial A_jkpartial beta - fracA_jkleft( sum_k A_jk right)^2 fracpartial sum_k A_jkpartial beta right) \n= fracR_jsum_k A_jk left( fracpartial A_jkpartial beta - fracA_jksum_k A_jk sum_k fracpartial A_jkpartial beta right) \nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"Given our specific definition of A_jk being a Gaussian distribution, we have","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nmu_j = alpha left( T_textmax - t_j right) + beta \nfracpartial A_jkpartial beta = fracpartialpartial beta left textexp left( - frac12 left( frac textMtextH_k - mu_jsigma right)^2 right) right \n= fracA_jksigma^2 left( textMtextH_k - mu_j right)\nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"We can now substitute this result into the above expressions to write","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nfracpartial Fpartial beta = sum_jk fracpartial Fpartial r_jk fracpartial r_jkpartial beta \n= sum_jk fracpartial Fpartial r_jk fracR_jsum_k A_jk left( fracpartial A_jkpartial beta - fracA_jksum_k A_jk sum_k fracpartial A_jkpartial beta right) \n= sum_jk fracpartial Fpartial r_jk fracR_jsigma^2 sum_k A_jk left( A_jk left( textMtextH_k - mu_j right) - fracA_jksum_k A_jk sum_k A_jk left( textMtextH_k - mu_j right) right)\nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"It can be shown that the partial derivative of F with respect to alpha is simply","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"fracpartial Fpartial alpha = sum_jk fracpartial Fpartial r_jk fracpartial r_jkpartial alpha = sum_jk fracpartial Fpartial r_jk fracpartial r_jkpartial beta times left( T_textmax - t_j right) ","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"The partial derivative with respect to sigma is slightly more complicated, but we can start identically to how we started above when deriving fracpartial Fpartial beta with","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"beginaligned\nfracpartial Fpartial sigma = sum_jk fracpartial Fpartial r_jk fracpartial r_jkpartial sigma \nfracpartial r_jkpartial sigma = R_j left( frac1sum_k A_jk fracpartial A_jkpartial sigma - fracA_jkleft( sum_k A_jk right)^2 fracpartial sum_k A_jkpartial sigma right) \n= fracR_jsum_k A_jk left( fracpartial A_jkpartial sigma - fracA_jksum_k A_jk sum_k fracpartial A_jkpartial sigma right) \nendaligned","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"Then all we need is","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"fracpartial A_jkpartial sigma = fracA_jk left( textMtextH_k - mu_j right)^2sigma^3","category":"page"},{"location":"fitting/linear_amr/","page":"Linear Age-Metallicity Relation","title":"Linear Age-Metallicity Relation","text":"which we can substitute into the above expressions to find fracpartial Fpartial sigma.","category":"page"},{"location":"simulate/#simulate","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"","category":"section"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"Modelling observations of resolved stellar populations (e.g., color-magnitude or Hess diagrams) with user-defined star formation histories can be useful for comparison to actual observations, but also enables a number of other scientific activities (e.g., making predictions to motivate observational proposals). To support these uses we offer methods for sampling stellar populations from isochrones using user-defined star formation histories, initial mass functions, and stellar binary models. These methods require data from user-provided isochrones (this package does not provide any), an initial mass function model (such as those provided in InitialMassFunctions.jl), and a model specifying how (or if) to sample binary or multi-star systems. ","category":"page"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"The simplest methods only sample stars from a single stellar population. We provide a method that samples up to a provided stellar mass, generate_stars_mass (e.g., 10^7 textM_odot) and a method that samples up to a provided absolute magnitude generate_stars_mag (e.g., M_V=-10). These are documented under the first subsection below. These methods are single-threaded.","category":"page"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"We also offer methods for sampling populations with complex star formation histories; these are implicitly multi-threaded across the separate populations if you start Julia with multiple threads (e.g., with julia -t 4 or similar). We provide generate_stars_mass_composite for sampling such populations up to a provided stellar mass and generate_stars_mag_composite for sampling such populations up to a provided absolute magnitude. These are documented under the second subsection below.","category":"page"},{"location":"simulate/#Simple-Stellar-Populations","page":"Simulating Color-Magnitude Diagrams","title":"Simple Stellar Populations","text":"","category":"section"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"generate_stars_mass\ngenerate_stars_mag","category":"page"},{"location":"simulate/#StarFormationHistories.generate_stars_mass","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.generate_stars_mass","text":"(sampled_masses, sampled_mags) = generate_stars_mass(mini_vec::AbstractVector{<:Number}, mags, mag_names::AbstractVector{String}, limit::Number, imf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous}; dist_mod::Number=0, rng::Random.AbstractRNG=Random.default_rng(), mag_lim::Number=Inf, mag_lim_name::String=\"V\", binary_model::StarFormationHistories.AbstractBinaryModel=StarFormationHistories.RandomBinaryPairs(0.3))\n\nGenerates a random sample of stars from an isochrone defined by the provided initial stellar masses mini_vec, absolute magnitudes mags, and filter names mag_names with total population birth stellar mass limit (e.g., 1e5 solar masses). Initial stellar masses are sampled from the provided imf. \n\nArguments\n\nmini_vec::AbstractVector{<:Number} contains the initial masses (in solar masses) for the stars in the isochrone; must be mutable as we call Interpolations.deduplicate_knots!(mini_vec).\nmags contains the absolute magnitudes from the isochrone in the desired filters corresponding to the same stars as provided in mini_vec. mags is internally interpreted and converted into a standard format by StarFormationHistories.ingest_mags. Valid inputs are:\nmags::AbstractVector{AbstractVector{<:Number}}, in which case the length of the outer vector length(mags) can either be equal to length(mini_vec), in which case the length of the inner vectors must all be equal to the number of filters you are providing, or the length of the outer vector can be equal to the number of filters you are providing, and the length of the inner vectors must all be equal to length(mini_vec); this is the more common use-case.\nmags::AbstractMatrix{<:Number}, in which case mags must be 2-dimensional. Valid shapes are size(mags) == (length(mini_vec), nfilters) or size(mags) == (nfilters, length(mini_vec)), with nfilters being the number of filters you are providing.\nmag_names::AbstractVector{String} contains strings describing the filters you are providing in mags; an example might be [\"B\",\"V\"]. These are used when mag_lim is finite to determine what filter you want to use to limit the faintest stars you want returned.\nlimit::Number gives the total birth stellar mass of the population you want to sample. See the \"Notes\" section on population masses for more information.\nimf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous} is a sampleable continuous univariate distribution implementing a stellar initial mass function with a defined rand(rng::Random.AbstractRNG, imf) method to use for sampling masses. All instances of Distributions.ContinuousUnivariateDistribution are also valid. Implementations of commonly used IMFs are available in InitialMassFunctions.jl.\n\nKeyword Arguments\n\ndist_mod::Number=0 is the distance modulus (see StarFormationHistories.distance_modulus) you wish to have added to the returned magnitudes to simulate a population at a particular distance.\nrng::Random.AbstractRNG=Random.default_rng() is the rng instance that will be used to sample the stellar initial masses from imf.\nmag_lim::Number=Inf gives the faintest apparent magnitude for stars you want to be returned in the output. Stars fainter than this magnitude will still be sampled and contribute properly to the total mass of the population, but they will not be returned.\nmag_lim_name::String=\"V\" gives the filter name (as contained in mag_names) to use when considering if a star is fainter than mag_lim. This is unused if mag_lim is infinite.\nbinary_model::StarFormationHistories.AbstractBinaryModel=StarFormationHistories.RandomBinaryPairs(0.3) is an instance of a model for treating binaries; currently provided options are NoBinaries, RandomBinaryPairs, and BinaryMassRatio.\n\nReturns\n\nsampled_masses::Vector{SVector{N,eltype(imf)}}: a vector containing the initial stellar masses of the stars sampled by sample_system; see that method's documentation for details on format. In short, each StaticArrays.SVector represents one stellar system and each entry in each StaticArrays.SVector is one star in that system. Entries will be 0 when companions could have been sampled but were not (i.e., when using a binary_model that supports multi-star systems). \nsampled_mags::Vector{SVector{N,<:Number}}: a vector containing StaticArrays.SVectors with the multi-band magnitudes of the sampled stars. To get the magnitude of star i in band j, you index as sampled_mags[i][j]. This can be reinterpreted as a 2-dimensional Matrix with reduce(hcat,sampled_mags). \n\nNotes\n\nPopulation Masses\n\nGiven a particular isochrone with an initial mass vector mini_vec, it will never cover the full range of stellar birth masses because stars that die before present-day are not included in the isochrone. However, these stars were born, and so contribute to the total birth mass of the system. There are two ways to properly account for this lost mass when sampling:\n\nSet the upper limit for masses that can be sampled from the imf distribution to a physical value for the maximum birth mass of stars (e.g., 100 solar masses). In this case, these stars will be sampled from imf, and will contribute their masses to the system, but they will not be returned if their birth mass is greater than maximum(mini_vec). This is typically easiest for the user and only results in ∼15% loss of efficiency for 10 Gyr isochrones.\nSet the upper limit for masses that can be sampled from the imf distribution to maximum(mini_vec) and adjust limit to respect the amount of initial stellar mass lost by not sampling higher mass stars. This can be calculated as new_limit = limit * ( QuadGK.quadgk(x->x*pdf(imf,x), minimum(mini_vec), maximum(mini_vec))[1] / QuadGK.quadgk(x->x*pdf(imf,x), minimum(imf), maximum(imf))[1] ), with the multiplicative factor being the fraction of the population stellar mass contained in stars with initial masses between minimum(mini_vec) and maximum(mini_vec); this factor is the ratio\n\nfracint_a^b m times fracdN(m)dm dmint_0^ m times fracdN(m)dm dm\n\n\n\n\n\n","category":"function"},{"location":"simulate/#StarFormationHistories.generate_stars_mag","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.generate_stars_mag","text":"(sampled_masses, sampled_mags) = generate_stars_mag(mini_vec::AbstractVector{<:Number}, mags, mag_names::AbstractVector{String}, absmag::Real, absmag_name::String, imf::Distributions.Sampleable{Distributions.Univariate,Distributions.Continuous}; dist_mod::Number=0, rng::AbstractRNG=default_rng(), mag_lim::Number=Inf, mag_lim_name::String=\"V\", binary_model::StarFormationHistories.AbstractBinaryModel=RandomBinaryPairs(0.3))\n\nGenerates a mock stellar population from an isochrone defined by the provided initial stellar masses mini_vec, absolute magnitudes mags, and filter names mag_names. The population is sampled to a total absolute magnitude absmag::Real (e.g., -7 or -12) in the filter absmag_name::String (e.g., \"V\" or \"F606W\") which is contained in the provided mag_names::AbstractVector{String}. Other arguments are shared with generate_stars_mass, which contains the main documentation.\n\nNotes\n\nPopulation Magnitudes\n\nUnlike when sampling a population to a fixed initial birth mass, as is implemented in generate_stars_mass, when generating a population up to a fixed absolute magnitude, only stars that survive to present-day contribute to the flux of the population. If you choose to limit the apparent magnitude of stars returned by passing the mag_lim and mag_lim_name keyword arguments, stars fainter than your chosen limit will still be sampled and will still contribute their luminosity to the total population, but they will not be contained in the returned output. \n\n\n\n\n\n","category":"function"},{"location":"simulate/#Complex-Stellar-Populations","page":"Simulating Color-Magnitude Diagrams","title":"Complex Stellar Populations","text":"","category":"section"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"generate_stars_mass_composite\ngenerate_stars_mag_composite","category":"page"},{"location":"simulate/#StarFormationHistories.generate_stars_mass_composite","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.generate_stars_mass_composite","text":"(sampled_masses, sampled_mags) = generate_stars_mass_composite(mini_vec::AbstractVector{<:AbstractVector{<:Number}}, mags::AbstractVector, mag_names::AbstractVector{String}, limit::Number, massfrac::AbstractVector{<:Number}, imf::Sampleable{Univariate,Continuous}; kws...)\n\nGenerates a random sample of stars with a complex star formation history using multiple isochrones. Very similar to generate_stars_mass except the isochrone-related arguments mini_vec and mags should now be vectors of vectors containing the relevant data for the full set of isochrones to be considered. The total birth stellar mass of the sampled population is given by limit. The proportion of this mass allotted to each of the individual isochrones is given by the entries of the massfrac vector. This basically just proportions limit according to massfrac and calls generate_stars_mass for each of the individual stellar populations; as such it is set up to multi-thread across the multiple stellar populations. \n\nArguments\n\nmini_vec::AbstractVector{<:AbstractVector{<:Number}} contains the initial masses (in solar masses) for the stars in each isochrone; the internal vectors must be mutable as we will call Interpolations.deduplicate_knots! on each. The length of mini_vec should be equal to the number of isochrones. \nmags contains the absolute magnitudes from the isochrones in the desired filters corresponding to the same stars as provided in mini_vec. The length of mags should be equal to the number of isochrones. The individual elements of mags are each internally interpreted and converted into a standard format by StarFormationHistories.ingest_mags. The valid formats for the individual elements of mags are:\nAbstractVector{AbstractVector{<:Number}}, in which case the length of the vector length(mags[i]) can either be equal to length(mini_vec[i]), in which case the length of the inner vectors must all be equal to the number of filters you are providing, or the length of the outer vector can be equal to the number of filters you are providing, and the length of the inner vectors must all be equal to length(mini_vec[i]); this is the more common use-case.\nAbstractMatrix{<:Number}, in which case mags[i] must be 2-dimensional. Valid shapes are size(mags[i]) == (length(mini_vec[i]), nfilters) or size(mags[i]) == (nfilters, length(mini_vec[i])), with nfilters being the number of filters you are providing.\nmag_names::AbstractVector{String} contains strings describing the filters you are providing in mags; an example might be [\"B\",\"V\"]. These are used when mag_lim is finite to determine what filter you want to use to limit the faintest stars you want returned. These are assumed to be the same for all isochrones.\nlimit::Number gives the total birth stellar mass of the population you want to sample. \nmassfrac::AbstractVector{<:Number} is vector giving the relative fraction of mass allotted to each individual stellar population; length must be equal to the length of mini_vec and mags. \nimf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous} is a sampleable continuous univariate distribution implementing a stellar initial mass function with a defined rand(rng::Random.AbstractRNG, imf) method to use for sampling masses. All instances of Distributions.ContinuousUnivariateDistribution are also valid. Implementations of commonly used IMFs are available in InitialMassFunctions.jl.\n\nKeyword Arguments\n\nAll keyword arguments kws... are passed to generate_stars_mass; you should refer to that method's documentation for more information. \n\nReturns\n\nsampled_masses::Vector{Vector{SVector{N,eltype(imf)}}} is a vector of vectors containing the initial stellar masses of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e., all of sampled_masses[1] were sampled from mini_vec[1] and so on. These can be concatenated into a single vector with reduce(vcat,sampled_masses). The format of the contained StaticArrays.SVectors are as output from sample_system; see that method's documentation for more details. \nsampled_mags::Vector{Vector{SVector{N,<:Number}}} is a vector of vectors containing StaticArrays.SVectors with the multi-band magnitudes of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e. all of sampled_mags[1] were sampled from mags[1] and so on. To get the magnitude of star i in band j sampled from isochrone k, you would do sampled_mags[k][i][j]. This can be concatenated into a Vector{SVector} with reduce(vcat,sampled_mags) and a 2-D Matrix with reduce(hcat,reduce(vcat,sampled_mags)). \n\n\n\n\n\n","category":"function"},{"location":"simulate/#StarFormationHistories.generate_stars_mag_composite","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.generate_stars_mag_composite","text":"(sampled_masses, sampled_mags) = generate_stars_mag_composite(mini_vec::AbstractVector{<:AbstractVector{<:Number}}, mags::AbstractVector, mag_names::AbstractVector{String}, absmag::Number, absmag_name::String, fracs::AbstractVector{<:Number}, imf::Sampleable{Univariate,Continuous}; frac_type::String=\"lum\", kws...)\n\nGenerates a random sample of stars with a complex star formation history using multiple isochrones. Very similar to generate_stars_mag except the isochrone-related arguments mini_vec and mags should now be vectors of vectors containing the relevant data for the full set of isochrones to be considered. The total absolute magnitude of the sampled population is given by absmag. The proportion of the luminosity allotted to each of the individual isochrones is given by the entries of the frac vector. This basically just proportions the luminosity according to frac and calls generate_stars_mag for each of the individual stellar populations; as such it is set up to multi-thread across the multiple stellar populations. \n\nArguments\n\nmini_vec::AbstractVector{<:AbstractVector{<:Number}} contains the initial masses (in solar masses) for the stars in each isochrone; the internal vectors must be mutable as we will call Interpolations.deduplicate_knots! on each. The length of mini_vec should be equal to the number of isochrones. \nmags contains the absolute magnitudes from the isochrones in the desired filters corresponding to the same stars as provided in mini_vec. The length of mags should be equal to the number of isochrones. The individual elements of mags are each internally interpreted and converted into a standard format by StarFormationHistories.ingest_mags. The valid formats for the individual elements of mags are:\nAbstractVector{AbstractVector{<:Number}}, in which case the length of the vector length(mags[i]) can either be equal to length(mini_vec[i]), in which case the length of the inner vectors must all be equal to the number of filters you are providing, or the length of the outer vector can be equal to the number of filters you are providing, and the length of the inner vectors must all be equal to length(mini_vec[i]); this is the more common use-case.\nAbstractMatrix{<:Number}, in which case mags[i] must be 2-dimensional. Valid shapes are size(mags[i]) == (length(mini_vec[i]), nfilters) or size(mags[i]) == (nfilters, length(mini_vec[i])), with nfilters being the number of filters you are providing.\nmag_names::AbstractVector{String} contains strings describing the filters you are providing in mags; an example might be [\"B\",\"V\"]. These are used when mag_lim is finite to determine what filter you want to use to limit the faintest stars you want returned. These are assumed to be the same for all isochrones.\nabsmag::Number gives the total absolute magnitude of the complex population to be sampled. \nfracs::AbstractVector{<:Number} is a vector giving the relative fraction of luminosity or mass (determined by the frac_type keyword argument) allotted to each individual stellar population; length must be equal to the length of mini_vec and mags. \nimf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous} is a sampleable continuous univariate distribution implementing a stellar initial mass function with a defined rand(rng::Random.AbstractRNG, imf) method to use for sampling masses. All instances of Distributions.ContinuousUnivariateDistribution are also valid. Implementations of commonly used IMFs are available in InitialMassFunctions.jl.\n\nKeyword Arguments\n\nfrac_type::String either \"lum\", in which case fracs is assumed to contain the relative luminosity fractions for each individual isochrone, or \"mass\", in which case it is assumed that fracs contains mass fractions (\"mass\" is not yet implemented). \n\nAll other keyword arguments kws... are passed to generate_stars_mag; you should refer to that method's documentation for more information. \n\nReturns\n\nsampled_masses::Vector{Vector{SVector{N,eltype(imf)}}} is a vector of vectors containing the initial stellar masses of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e., all of sampled_masses[1] were sampled from mini_vec[1] and so on. These can be concatenated into a single vector with reduce(vcat,sampled_masses). The format of the contained StaticArrays.SVectors are as output from sample_system; see that method's documentation for more details. \nsampled_mags::Vector{Vector{SVector{N,<:Number}}} is a vector of vectors containing StaticArrays.SVectors with the multi-band magnitudes of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e. all of sampled_mags[1] were sampled from mags[1] and so on. To get the magnitude of star i in band j sampled from isochrone k, you would do sampled_mags[k][i][j]. This can be concatenated into a Vector{SVector} with reduce(vcat,sampled_mags) and a 2-D Matrix with reduce(hcat,reduce(vcat,sampled_mags)). \n\n\n\n\n\n","category":"function"},{"location":"simulate/#Observational-Effects","page":"Simulating Color-Magnitude Diagrams","title":"Observational Effects","text":"","category":"section"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"The output produced from the above methods are clean in the sense that they do not include any observational effects like photometric error or incompleteness. These effects should be implemented in a post-processing step. We provide a simple method model_cmd that accepts user-defined photometric error and completeness functions and applies them to the initial catalog, returning a Monte Carlo realization of a possible observed catalog. This method assumes Gaussian photometric errors and that the photometric error and completeness functions are separable by filter – these assumptions are not applicable for all types of data, but the source code for the method is exceedingly simple (~20 lines) and should provide an example for how you could write a similar method that more accurately reflects your data.","category":"page"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"model_cmd","category":"page"},{"location":"simulate/#StarFormationHistories.model_cmd","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.model_cmd","text":"new_mags = model_cmd(mags::AbstractVector{<:AbstractVector{<:Number}}, errfuncs, completefuncs; rng::Random.AbstractRNG=Random.default_rng())\n\nSimple method for modelling photometric error and incompleteness to \"mock observe\" a pure catalog of stellar photometry, such as those produced by generate_stars_mass and generate_stars_mag. This method assumes Gaussian photometric errors and that the photometric error and completeness functions are separable by filter. \n\nArguments\n\nmags::AbstractVector{<:AbstractVector{<:Number}}: a vector of vectors giving the magnitudes of each star to be modelled. The first index is the per-star index and the second index is the per-filter index (so mags[10][2] would give the magnitude of the tenth star in the second filter). This is the same format as the magnitudes returned by generate_stars_mass and generate_stars_mag; to use output from the composite versions, you must first reduce(vcat,mags) before passing to this function.\nerrfuncs: an iterable (typically a vector or tuple) of callables (typically functions or interpolators) with length equal to the number of filters contained in the elements of mags. This iterable must contain callables that, when called with the associated magnitudes from mags, will return the expected 1-σ photometric error at that magnitude. The organization is such that the photometric error for star i in band j is σ_ij = errfuncs[j](mags[i][j]). \ncompletefuncs: an iterable (typically a vector or tuple) of callables (typically functions or interpolators) with length equal to the number of filters contained in the elements of mags. This iterable must contain callables that, when called with the associated magnitudes from mags, will return the probability that a star with that magnitude in that band will be found in your color-magnitude diagram (this should include the original detection probability and any post-detection quality, morphology, or other cuts). The organization is such that the detection probability for star i in band j is c_ij = completefuncs[j](mags[i][j]).\n\nKeyword Arguments\n\nrng::AbstractRNG=Random.default_rng(): The object to use for random number generation.\n\nReturns\n\nnew_mags: an object similar to mags (i.e., a Vector{Vector{<:Number}}, Vector{SVector{N,<:Number}}, etc.) containing the magnitudes of the mock-observed stars. This will be shorter than the provided mags vector as we are modelling photometric incompleteness, and the magnitudes will also have random photometric errors added to them. This can be reinterpreted as a 2-dimensional Matrix with reduce(hcat,new_mags). \n\nNotes\n\nThis is a simple implementation that seeks to show a simple example of how one can post-process catalogs of \"pure\" stars from methods like generate_stars_mass and generate_stars_mag to include observational effects. This method assumes Gaussian photometric errors, which may not, in general, be accurate. It also assumes that the total detection probability can be modelled as the product of the single-filter detection probabilities as computed by completefuncs (i.e., that the completeness functions are separable across filters). This can be a reasonable assumption when you have separate photometric catalogs derived for each filter and you only collate them afterwards, but it is generally not a good assumption for detection algorithms that operate on simultaneously on multi-band photometry – the completeness functions for these types of algorithms are generally not separable.\n\n\n\n\n\n","category":"function"},{"location":"simulate/#Developer-Internals","page":"Simulating Color-Magnitude Diagrams","title":"Developer Internals","text":"","category":"section"},{"location":"simulate/","page":"Simulating Color-Magnitude Diagrams","title":"Simulating Color-Magnitude Diagrams","text":"StarFormationHistories.ingest_mags\nStarFormationHistories.sort_ingested\nStarFormationHistories.mass_limits","category":"page"},{"location":"simulate/#StarFormationHistories.ingest_mags","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.ingest_mags","text":"new_mags = ingest_mags(mini_vec::AbstractVector, mags::AbstractVector{T}) where {S <: Number, T <: AbstractVector{S}}\nnew_mags = ingest_mags(mini_vec::AbstractVector, mags::AbstractMatrix{S}) where S <: Number\n\nReinterprets provided mags to be in the correct format for input to Interpolations.interpolate.\n\nReturns\n\nnew_mags::Base.ReinterpretArray{StaticArrays.SVector}: a length(mini_vec) vector of StaticArrays.SVectors containing the same data as mags but formatted for input to Interpolations.interpolate.\n\n\n\n\n\n","category":"function"},{"location":"simulate/#StarFormationHistories.sort_ingested","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.sort_ingested","text":"(new_mini_vec, new_mags) = sort_ingested(mini_vec::AbstractVector, mags::AbstractVector)\n\nTakes mini_vec and mags and ensures that mini_vec is sorted (sometimes in PARSEC isochrones they are not) and calls Interpolations.deduplicate_knots! on mini_vec to ensure there are no repeat entries. Arguments must satisfy length(mini_vec) == length(mags). \n\n\n\n\n\n","category":"function"},{"location":"simulate/#StarFormationHistories.mass_limits","page":"Simulating Color-Magnitude Diagrams","title":"StarFormationHistories.mass_limits","text":"(mmin, mmax) = mass_limits(mini_vec::AbstractVector{<:Number}, mags::AbstractVector{T},\n mag_names::AbstractVector{String}, mag_lim::Number,\n mag_lim_name::String) where T <: AbstractVector{<:Number}\n\nCalculates initial mass limits that reflect a given faint-end magnitude limit.\n\nArguments\n\nmini_vec::AbstractVector{<:Number}: a length nstars vector containing initial stellar masses.\nmags::AbstractVector{<:AbstractVector{<:Number}}: a length nstars vector, with each element being a length nfilters vector giving the magnitudes of each star in the filters mag_names.\nmag_names::AbstractVector{String}: a vector giving the names of each filter as strings.\nmag_lim::Number: the faint-end magnitude limit you wish to use.\nmag_lim_name::String: the name of the filter in which mag_lim is to be applied. Must be contained in mag_names.\n\nReturns\n\nmmin::eltype(mini_vec): the initial mass corresponding to your requested mag_lim in the filter mag_lim_name. If all stars provided are brighter than your requested mag_lim, then this will be equal to minimum(mini_vec).\nmmax::eltype(mini_vec): the maximum valid mass in mini_vec; simply maximum(mini_vec).\n\nExamples\n\njulia> mass_limits([0.05,0.1,0.2,0.3], [[4.0],[3.0],[2.0],[1.0]], [\"F090W\"], 2.5, \"F090W\")\n(0.15, 0.3)\n\njulia> mass_limits([0.05,0.1,0.2,0.3], [[4.0,3.0],[3.0,2.0],[2.0,1.0],[1.0,0.0]], [\"F090W\",\"F150W\"], 2.5, \"F090W\")\n(0.15, 0.3)\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#Developer-Internals","page":"Developer Internals","title":"Developer Internals","text":"","category":"section"},{"location":"fitting/internals/","page":"Developer Internals","title":"Developer Internals","text":"StarFormationHistories.composite!\nStarFormationHistories.loglikelihood\nStarFormationHistories.∇loglikelihood\nStarFormationHistories.∇loglikelihood!\nStarFormationHistories.fg!\nStarFormationHistories.truncate_relweights\nStarFormationHistories.calculate_edges","category":"page"},{"location":"fitting/internals/#StarFormationHistories.composite!","page":"Developer Internals","title":"StarFormationHistories.composite!","text":" composite!(composite::AbstractMatrix{<:Number},\n coeffs::AbstractVector{<:Number},\n models::AbstractVector{T})\n where T <: AbstractMatrix{<:Number}\n\nUpdates the composite matrix in place with the linear combination of sum( coeffs .* models ); this is equation 1 in Dolphin 2002, m_i = sum_j r_j c_ij.\n\nExamples\n\njulia> C = zeros(5,5);\njulia> models = [rand(size(C)...) for i in 1:5];\njulia> coeffs = rand(length(models));\njulia> composite!(C, coeffs, models);\njulia> C ≈ sum( coeffs .* models)\ntrue\n\n\n\n\n\ncomposite!(composite::AbstractVector{<:Number},\n coeffs::AbstractVector{<:Number},\n models::AbstractMatrix{<:Number})\n\nUpdates the composite vector with the matrix-vector product of models * coeffs. This is equation 1 in Dolphin 2002, m_i = sum_j r_j c_ij.\n\nExamples\n\njulia> hist_size = (5,10);\njulia> models = reduce(hcat,rand(prod(hist_size)) for i in 1:20);\njulia> coeffs = rand(length(axes(models,2)));\njulia> C = zeros(length(axes(models,1)));\njulia> composite!(C, coeffs, models);\njulia> C ≈ models * coeffs\ntrue\n\nNotes\n\nWhile the other call signature for this function more closely mirrors the natural data structure for Hess diagrams (2D matrices for composite and each entry in models), this method operates on the same data but flattened. Thus composite becomes a vector rather than a matrix and models becomes a single matrix rather than a vector of matrices. The method StarFormationHistories.stack_models is provided to stack the models into this format. This data layout enables us to use the highly optimized LinearAlgebra.mul! function to perform the matrix-vector product which typically achieves >30% speedup relative to the more natural formulation. Additionally, as mul! will typically call to a BLAS matrix-vector product function like gemv! for our use-case, we can switch out Julia's default OpenBLAS at runtime for other BLAS libraries with Julia bindings like MKL and Apple Accelerate, enabling even greater performance improvements.\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#StarFormationHistories.loglikelihood","page":"Developer Internals","title":"StarFormationHistories.loglikelihood","text":"loglikelihood(composite::AbstractArray{<:Number}, data::AbstractArray{<:Number})\n\nReturns the logarithm of the Poisson likelihood ratio given by equation 10 in Dolphin 2002,\n\ntextln mathscrL = sum_i -m_i + n_i times left( 1 - textln left( fracn_im_i right) right)\n\nwith composite being the complex Hess model diagram m_i (see StarFormationHistories.composite!) and data being the observed Hess diagram n_i.\n\nPerformance Notes\n\n~18.57 μs for composite=Matrix{Float64}(undef,99,99) and data=similar(composite).\n~20 μs for composite=Matrix{Float64}(undef,99,99) and data=Matrix{Int64}(undef,99,99).\n~9.3 μs for composite=Matrix{Float32}(undef,99,99) and data=similar(composite).\n~9.6 μs for composite=Matrix{Float32}(undef,99,99) and data=Matrix{Int64}(undef,99,99).\n\n\n\n\n\nloglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractVector{T}, data::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}\nloglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number})\n\nReturns the logarithm of the Poisson likelihood ratio, but constructs the complex Hess diagram model as sum(coeffs .* models) rather than taking composite directly as an argument. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#StarFormationHistories.∇loglikelihood","page":"Developer Internals","title":"StarFormationHistories.∇loglikelihood","text":"∇loglikelihood(model::AbstractArray{<:Number}, composite::AbstractArray{<:Number}, data::AbstractArray{<:Number})\n\nReturns the partial derivative of the logarithm of the Poisson likelihood ratio (StarFormationHistories.loglikelihood) with respect to the coefficient r_j on the provided model. If the complex Hess diagram model is m_i = sum_j r_j c_ij, then model is c_ij, and this function computes the partial derivative of textlog mathscrL with respect to the coefficient r_j. This is given by equation 21 in Dolphin 2002,\n\nfracpartial textlog mathscrLpartial r_j = sum_i c_ij left( fracn_im_i - 1 right)\n\nwhere n_i is bin i of the observed Hess diagram data. \n\nPerformance Notes\n\n~4.1 μs for model, composite, data all being Matrix{Float64}(undef,99,99).\n~1.3 μs for model, composite, data all being Matrix{Float32}(undef,99,99). \n\n\n\n\n\n∇loglikelihood(models::AbstractVector{T}, composite::AbstractMatrix{<:Number}, data::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}\n∇loglikelihood(models::AbstractMatrix{<:Number}, composite::AbstractVector{<:Number}, data::AbstractVector{<:Number})\n\nComputes the gradient of the logarithm of the Poisson likelihood ratio with respect to the coefficients by calling the single-model ∇loglikelihood for every model in models. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n∇loglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractVector{T}, data::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}\n∇loglikelihood(coeffs::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number})\n\nForms the composite matrix from coefficients coeffs and model templates models and returns the gradient of the loglikelihood with respect to the coefficients. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#StarFormationHistories.∇loglikelihood!","page":"Developer Internals","title":"StarFormationHistories.∇loglikelihood!","text":" ∇loglikelihood!(G::AbstractVector, composite::AbstractMatrix{<:Number}, models::AbstractVector{S}, data::AbstractMatrix{<:Number}) where S <: AbstractMatrix{<:Number}\n\nEfficiently computes the gradient of StarFormationHistories.loglikelihood with respect to all coefficients by updating G with the gradient. This will overwrite composite with the result of 1 .- (data ./ composite) so it shouldn't be reused after being passed to this function. \n\nArguments\n\nG::AbstractVector is the vector that will be mutated in-place with the computed gradient values.\nmodels::AbstractVector{<:AbstractMatrix{<:Number}} is the vector of matrices giving the model Hess diagrams.\ncomposite::AbstractMatrix{<:Number} is a matrix that contains the composite model sum(coeffs .* models).\ndata::AbstractMatrix{<:Number} contains the observed Hess diagram that is being fit.\n\n\n\n\n\nG = ∇loglikelihood!(G::AbstractVector, composite::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number})\n\nUpdates and returns G with the gradient of the loglikelihood with respect to all coefficients. This call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#StarFormationHistories.fg!","page":"Developer Internals","title":"StarFormationHistories.fg!","text":"-logL = fg!(F, G, coeffs::AbstractVector{<:Number}, models::AbstractVector{T}, data::AbstractMatrix{<:Number}, composite::AbstractMatrix{<:Number}) where T <: AbstractMatrix{<:Number}\n-logL = fg!(F, G, coeffs::AbstractVector{<:Number}, models::AbstractMatrix{<:Number}, data::AbstractVector{<:Number}, composite::AbstractVector{<:Number})\n\nComputes -loglikelihood and its gradient simultaneously for use with Optim.jl and other optimization APIs. See documentation here. Second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#StarFormationHistories.truncate_relweights","page":"Developer Internals","title":"StarFormationHistories.truncate_relweights","text":"keep_idx::Vector{Int} = truncate_relweights(relweightsmin::Number, relweights::AbstractVector{<:Number}, logAge::AbstractVector{<:Number})\n\nMethod to truncate an isochrone grid with log10(age [yr]) values logAge and relative weights relweights due to an age-metallicity relation to only include models with relweights greater than relweightsmin times the maximum relative weight for each unique entry in logAge. The input vectors are the same as those for StarFormationHistories.fixed_amr, which includes more information. Returns a vector of the indices into relweights and logAge of the isochrone models whose relative weights are significant given the provided relweightsmin.\n\nExamples\n\nWhen using a fixed input age-metallicity relation as enabled by, for example, StarFormationHistories.fixed_amr, only the star formation rate (or total stellar mass) coefficients need to be fit, as the metallicity distribution is no longer a free parameter in the model. As such, the relative weights of each model with identical logAge but different metallicities only need to be computed once at the start of the optimization. As the metallicity distribution is not a free parameter, it is also possible to truncate the list of models to only those that contribute significantly to the final composite model to improve runtime performance. That is what this method does.\n\nA simple isochrone grid will be two-dimensional, encompassing age and metallicity. Consider a subset of the model grid with the same age such that unique(logAge) = [10.0] but a series of different metallicities, metallicities = -2.5:0.25:0. If we model the metallicity distribution function for this age as having a mean [M/H] of -2.0 and a Gaussian spread of 0.2 dex, then the relative weights of these models can be approximated as \n\nimport Distributions: Normal, pdf\nmetallicities = -2.5:0.25:0\nrelweights = pdf.(Normal(-2.0, 0.2), metallicities)\nrelweights ./= sum(relweights) # Normalize the relative weights to unity sum\n\n11-element Vector{Float64}:\n 0.021919934465195145\n 0.2284109622221623\n 0.4988954088848224\n 0.2284109622221623\n 0.021919934465195145\n 0.0004409368867815243\n 1.8592101580561089e-6\n 1.6432188478108614e-9\n 3.0442281937632026e-13\n 1.1821534989089337e-17\n 9.622444440364979e-23\n\nSeveral of these models with very low relative weights are unlikely to contribute significantly to the final composite model. We can select out only the significant ones with, say, relative weights greater than 10% of the maximum as StarFormationHistories.truncate_relweights(0.1, relweights, fill(10.0,length(metallicities))) which will return indices into relweights whose values are greater than 0.1 * maximum(relweights) = 0.04988954088848224,\n\n3-element Vector{Int64}:\n 2\n 3\n 4\n\nwhich correspond to relweights[2,3,4] = [ 0.2284109622221623, 0.4988954088848224, 0.2284109622221623 ]. If we use only these 3 templates in the fit, instead of the original 11, we will achieve a speedup of almost 4x with a minor loss in precision which, in most cases, will be less than the numerical uncertainties on the individual star formation rate parameters. However, as fits of these sort are naturally quite fast, we recommend use of this type of truncation only in applications where many fits are required (e.g., Monte Carlo experiments). For most applications, this level of optimization is not necessary.\n\n\n\n\n\n","category":"function"},{"location":"fitting/internals/#StarFormationHistories.calculate_edges","page":"Developer Internals","title":"StarFormationHistories.calculate_edges","text":"calculate_edges(edges, xlim, ylim, nbins, xwidth, ywidth)\n\nFunction to calculate the bin edges for 2D histograms. Returns (xbins, ybins) with both entries being ranges. \n\nKeyword Arguments\n\nedges is a tuple of vectors-like objects defining the left-side edges of the bins along the x-axis (edges[1]) and the y-axis (edges[2]). Example: (-1.0:0.1:1.5, 22:0.1:27.2). If edges is provided, it will simply be returned.\nxlim; a length-2 indexable object (e.g., a Vector{Float64} or NTuple{2,Float64)) giving the lower and upper bounds on the x-axis corresponding to the provided colors array. Example: [-1.0, 1.5]. This is only used if edges==nothing.\nylim; as xlim but for the y-axis corresponding to the provided mags array. Example [25, 20]. This is only used if edges==nothing.\nnbins::NTuple{2,<:Integer} is a 2-tuple of integers providing the number of bins to use along the x- and y-axes. This is only used if edges==nothing.\nxwidth; the bin width along the x-axis for the colors array. This is only used if edges==nothing and nbins==nothing. Example: 0.1. \nywidth; as xwidth but for the y-axis corresponding to the provided mags array. Example: 0.1.\n\n\n\n\n\n","category":"function"},{"location":"fitting/log_amr/#Logarithmic-Age-Metallicity-Relation","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"","category":"section"},{"location":"fitting/log_amr/#Definition","page":"Logarithmic Age-Metallicity Relation","title":"Definition","text":"","category":"section"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"This model differs from the linear age-metallicity relation (AMR) in its definition of the mean metallicity at lookback time t. In the linear model, we defined the mean metallicity as langle textMtextH rangle (t) = alpha left( T_textmax - t_j right) + beta, whereas in this model we define the metal mass fraction Z to be linear with lookback time, such that [M/H] scales logarithmically with lookback time,","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nlangle Z rangle (t) = alpha left( T_textmax - t right) + beta \nlangle textMtextHrangle (t) equiv textlog left( fraclangle Z rangle left(tright)X right) - textlog left( fracZ_odotX_odot right)\nendaligned","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"with T_textmax being the earliest lookback time under consideration, such that langle Z rangle (T_textmax) = beta. We choose this parameterization so that positive alpha and beta result in an age-metallicity relation that is monotonically increasing with decreasing lookback time t. We model the spread in metallicities at fixed t as Gaussian in [M/H], identically to how it is modelled in the linear AMR case. This implies the spread is asymmetric in Z; this can be seen in the output of examples/log_amr/log_amr_example.jl, shown below, which illustrates the relative weights due to a logarithmic AMR across a grid of ages and metallicities. The per-model coefficients implied by a such a logarithmic AMR can be calculated with calculate_coeffs_logamr.","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"ENV[\"GKSwstype\"] = \"100\" # https://discourse.julialang.org/t/generation-of-documentation-fails-qt-qpa-xcb-could-not-connect-to-display/60988 # hide\ninclude(\"../../../examples/log_amr/log_amr_example.jl\") # hide\nsavefig(\"log_amr_plot.svg\"); nothing # hide","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"(Image: Visualization of the relative weights across a grid of logAge and metallicity under a logarithmic age-metallicity relation.)","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"StarFormationHistories.calculate_coeffs_logamr","category":"page"},{"location":"fitting/log_amr/#StarFormationHistories.calculate_coeffs_logamr","page":"Logarithmic Age-Metallicity Relation","title":"StarFormationHistories.calculate_coeffs_logamr","text":"calculate_coeffs_logamr(variables::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number\n [, α::Number, β::Number, σ::Number];\n MH_func = StarFormationHistories.MH_from_Z)\n\nCalculates per-model stellar mass coefficients coeffs from the fitting parameters of StarFormationHistories.fit_templates_logamr and StarFormationHistories.hmc_sample_logamr. The variables returned by these functions is of length length(unique(logAge))+3. The first length(logAge) entries are stellar mass coefficients, one per unique entry in logAge. The final three elements are α, β, and σ defining a metallicity evolution such that the mean metal mass fraction Z for element i of unique(logAge) is μ_Z[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. This is converted to a mean metallicity in [M/H] via the provided callable keyword argument MH_func which defaults to StarFormationHistories.MH_from_Z. The individual weights per each isochrone are then determined via Gaussian weighting with the above mean [M/H] and the provided σ in dex. The provided metallicities vector should be in [M/H]. \n\nNotes\n\nPhysically, the metal mass fraction Z must always be positive. Under the above model, this means α and β must be greater than or equal to 0. With σ being a Gaussian width, it must be positive.\nIf T_max is lower than the maximum of the logAge argument you provide, a warning will be raised which may be ignored if it does not result in any of the mean metal mass fractions Z being less than 0 for any of the provided logAge.\nAn error will be thrown if the provided age-metallicity relation variables (α, β) and T_max argument result in a mean metal mass fraction less than 0 for any time in the provided logAge vector. \n\n\n\n\n\n","category":"function"},{"location":"fitting/log_amr/#Fitting-Functions","page":"Logarithmic Age-Metallicity Relation","title":"Fitting Functions","text":"","category":"section"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"The main function we provide to fit star formation histories to Hess diagrams under the logarithmic age-metallicity relation is fit_templates_logamr. This function operates similarly to the fitting function for the linear AMR model, fit_templates_mdf. ","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"StarFormationHistories.fit_templates_logamr","category":"page"},{"location":"fitting/log_amr/#StarFormationHistories.fit_templates_logamr","page":"Logarithmic Age-Metallicity Relation","title":"StarFormationHistories.fit_templates_logamr","text":"result = fit_templates_logamr(models::AbstractVector{<:AbstractMatrix{S}},\n data::AbstractMatrix{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number\n [, σ::Number];\n x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),\n [1e-4, 5e-5, 0.2]),\n MH_func = StarFormationHistories.MH_from_Z,\n MH_deriv_Z = StarFormationHistories.dMH_dZ,\n kws...) where {S <: Number}\nresult = fit_templates_logamr(models::AbstractMatrix{S},\n data::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number}\n T_max::Number\n [, σ::Number];\n x0 = vcat(construct_x0_mdf(logAge, convert(S,13.7)),\n [1e-4, 5e-5, 0.2]),\n MH_func = StarFormationHistories.MH_from_Z,\n MH_deriv_Z = StarFormationHistories.dMH_dZ,\n kws...) where {S <: Number}\n\nMethod that fits a linear combination of the provided Hess diagrams models to the observed Hess diagram data, constrained to have a logarithmic age-metallicity relation with the mean metal mass fraction μ_Z of element i of unique(logAge) being μ_Z[i] = α * (T_max - exp10(unique(logAge)[i]) / 1e9) + β. This is converted to a mean metallicity in [M/H] via the provided callable keyword argument MH_func which defaults to MH_from_Z. α is therefore a slope in the units of inverse Gyr, and β is the mean metal mass fraction of stars born at the earliest valid lookback time, determined by keyword argument T_max which has units of Gyr. Individual weights for each isochrone template are then determined via Gaussian weighting with the above mean [M/H] and the standard deviation σ in dex, which can either be fixed or fit.\n\nThis function is designed to work best with a \"grid\" of stellar models, defined by the outer product of N unique entries in logAge and M unique entries in metallicities. See the examples for more information on usage.\n\nThe second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\nArguments\n\nmodels are the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram. \ndata is the Hess diagram for the observed data. \nlogAge::AbstractVector{<:Number} is the vector containing the effective ages of the stellar populations used to create the templates in models, in units of log10(age [yr]). For example, if a population has an age of 1 Myr, its entry in logAge should be log10(10^6) = 6.0.\nmetallicities::AbstractVector{<:Number} is the vector containing the effective metallicities of the stellar populations used to create the templates in models. This should be a logarithmic abundance like [M/H] or [Fe/H].\nT_max::Number is the maximum lookback time in Gyr for which the age-metallicity relation is to be valid. In most cases this should just be the maximum of the logAge vector argument maximum(logAge) or slightly larger. By definition, this is the lookback time at which μ_Z = β. \n\nOptional Arguments\n\nIf provided, σ::Number is the fixed width of the Gaussian the defines the metallicity distribution function (MDF) at fixed logAge. If this argument is omitted, σ will be a free parameter in the fit. \n\nKeyword Arguments\n\nx0 is the vector of initial guesses for the stellar mass coefficients per unique entry in logAge, plus the variables that define the metallicity evolution model. You should basically always be calculating and passing this keyword argument. We provide construct_x0_mdf to prepare the first part of x0 assuming constant star formation rate, which is typically a good initial guess. You then have to concatenate that result with an initial guess for the metallicity evolution parameters. For example, x0=vcat(construct_x0_mdf(logAge, 13.7; normalize_value=1e4), [1e-4, 5e-5, 0.2]), where logAge is a valid argument for this function (see above), and the initial guesses on the parameters are [α, β, σ] = [1e-4, 5e-5, 0.2]. If you provide σ as an optional argument, then you should not include an entry for it in x0.\nMH_func is a callable that takes a metal mass fraction Z and returns the logarithmic abundance [M/H]; by default uses MH_from_Z.\nMH_deriv_Z is a callable that takes a metal mass fraction Zj and returns the derivative of MH_func with respect to the metal mass fraction Z evaluated at Zj. For the default value of MH_func, dMH_dZ provides the correct derivative. You only need to change this if you use an alternate MH_func.\nOther kws... are passed to Optim.options to set things like convergence criteria for the optimization.\n\n\n\n\n\n","category":"function"},{"location":"fitting/log_amr/#Sampling-Functions","page":"Logarithmic Age-Metallicity Relation","title":"Sampling Functions","text":"","category":"section"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"StarFormationHistories.hmc_sample_logamr","category":"page"},{"location":"fitting/log_amr/#StarFormationHistories.hmc_sample_logamr","page":"Logarithmic Age-Metallicity Relation","title":"StarFormationHistories.hmc_sample_logamr","text":"Not yet implemented \n\n\n\n\n\n","category":"function"},{"location":"fitting/log_amr/#Fixed-Logarithmic-Age-Metallicity-Relation","page":"Logarithmic Age-Metallicity Relation","title":"Fixed Logarithmic Age-Metallicity Relation","text":"","category":"section"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"We support fitting only the star formation parameters by adopting fixed values for alpha, beta, and sigma through the fixed_log_amr method.","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"StarFormationHistories.fixed_log_amr","category":"page"},{"location":"fitting/log_amr/#StarFormationHistories.fixed_log_amr","page":"Logarithmic Age-Metallicity Relation","title":"StarFormationHistories.fixed_log_amr","text":"fixed_log_amr(models,\n data,\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number,\n α::Number,\n β::Number,\n σ::Number;\n MH_func = StarFormationHistories.MH_from_Z,\n kws...)\n\nGiven a fully specified logarithmic age-metallicity relation with parameters (α, β, σ), fits maximum likelihood and maximum a posteriori star formation parameters. MH_func is a callable that returns a logarithmic metallicity [M/H] for a metal mass fraction argument and defaults to MH_from_Z. T_max is the lookback time in Gyr at which the mean metal mass fraction is \beta. See fixed_amr for info on format of returned result.\n\n\n\n\n\nfixed_log_amr(models,\n data,\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number},\n T_max::Number,\n constraint1,\n constraint2,\n σ::Number;\n Z_func = StarFormationHistories.Z_from_MH,\n kws...)\n\nCall signature that takes two fixed points low_constraint and high_constraint that define points that must lie on the logarithmic age-metallicity relation and calculates the slope paramters α and β for you. Format is ([M/H], age [Gyr]), i.e. constraint1 = (-2.5, 13.7) for the first point at [M/H] = -2.5 at 13.7 Gyr lookback time and constraint2 = (-0.8, 0.0) for the second point at [M/H] = -0.8 at present-day (0.0 Gyr lookback time). The AMR is normalized so that the mean metal mass fraction at a lookback time in Gyr of T_max is Z = β. Metallicities in [M/H] are converted to metal mass fractions Z via the provided callable keyword argument Z_func which defaults to Z_from_MH. See fixed_amr for info on format of returned result.\n\n\n\n\n\n","category":"function"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"We provide the calculate_αβ_logamr convenience function to calculate the slope alpha and intercept beta from two points on the age-metallicity relation.","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"StarFormationHistories.calculate_αβ_logamr","category":"page"},{"location":"fitting/log_amr/#StarFormationHistories.calculate_αβ_logamr","page":"Logarithmic Age-Metallicity Relation","title":"StarFormationHistories.calculate_αβ_logamr","text":"(α, β) = calculate_αβ_logamr(low_constraint,\n high_constraint,\n T_max,\n Z_func=Z_from_MH)\n\nCalculates linear Z (log [M/H]) age-metallicity relation (AMR) slope α and intercept β from two points on the line with form ([M/H], age [Gyr]) given by the first two arguments. The AMR is normalized so that the mean metal mass fraction at a lookback time in Gyr of T_max is Z = β. More info given in fixed_log_amr. \n\n\n\n\n\n","category":"function"},{"location":"fitting/log_amr/#Implementation","page":"Logarithmic Age-Metallicity Relation","title":"Implementation","text":"","category":"section"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"As the only part of the model that differs from the linear AMR case is the mean age-metallicity relation, most of the derivation for the linear AMR case is still valid here. In particular, only the partial derivatives of the relative weights A_jk equiv textexp left( -frac12 sigma^2 left( textMtextH_k - mu_j right)^2right) with respect to the fitting parameters alpha and beta need to be recalculated under the new model. The partial derivative with respect to sigma is the same, as the mean metallicity in time bin j, denoted mu_j, does not depend on sigma.","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nZ_j equiv langle Z left(t_jright) rangle = alpha left( T_textmax - t_j right) + beta \n \nmu_j equiv langle textMtextH rangle left(t_jright) = textlog left( fraclangle Zleft(t_jright) rangleX_j right) - textlog left( fracZ_odotX_odot right) \n= textlog left frac alpha left( T_textmax - t_j right) + betaX_j right - textlog left( fracZ_odotX_odot right)\nendaligned","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"We can use the chain rule to write","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nA_jk equiv textexp left( - frac12 left( frac textMtextH_k - mu_jsigma right)^2 right) \nfracpartial A_jkpartial beta = fracpartial A_jkpartial mu_j fracpartial mu_jpartial beta \nfracpartial A_jkpartial alpha = fracpartial A_jkpartial mu_j fracpartial mu_jpartial alpha \nendaligned ","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"By definition the hydrogen, helium, and metal mass fractions, X, Y, and Z respectively, must sum to 1. For PARSEC models, Y is a function of Z (see Y_from_Z) such that X_j is a function of Z_j and therefore also alpha and beta. Under the PARSEC model, Y = Y_p + gamma Z, we have X(Z) = 1 - left( Y_p + gamma Z right) - Z such that we can rewrite the mu_j as ","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"mu_j = textlog left( fracZ_j1 - left( Y_p + gamma Z_j right) - Z_j right) - textlog left( fracZ_odotX_odot right)","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"and we can further expand the partial derivatives of mu_j as","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nfracpartial mu_jpartial beta = fracpartial mu_jpartial Z_j fracpartial Z_jpartial beta \nfracpartial mu_jpartial alpha = fracpartial mu_jpartial Z_j fracpartial Z_jpartial alpha \nendaligned ","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"such that the model-dependent portion left( fracpartial Z_jpartial beta right) can be separated from what is essentially a calibration defining how [M/H] is calculated from Z left( fracpartial mu_jpartial Z_j right). Given our model Z_j = alpha left( T_textmax - t_j right) + beta and the PARSEC calibration for conversion between Z_j and mu_j (i.e., [M/H]), we have","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nfracpartial mu_jpartial Z_j = fracY_p - 1textln10 Z_j left( Y_p + Z_j + gamma Z_j - 1 right) \nfracpartial Z_jpartial beta = fracpartial leftalpha left( T_textmax - t_j right) + beta rightpartial beta = 1 \nfracpartial Z_jpartial alpha = fracpartial left alpha left( T_textmax - t_j right) + beta rightpartial alpha = T_textmax - t_j \nendaligned","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"[M/H] as a function of Z for the PARSEC calibration is available as MH_from_Z and the partial derivative fracpartial mu_jpartial Z_j is available as dMH_dZ.","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"Which gives us final results","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nfracpartial A_jkpartial mu_j = fracA_jk left( textMtextH_k - mu_j right)sigma^2 \nfracpartial mu_jpartial beta = fracpartial mu_jpartial Z_j fracpartial Z_jpartial beta = left( fracY_p - 1textln(10) Z_j left( Y_p + Z_j + gamma Z_j - 1 right) right) left( 1 right) \nfracpartial mu_jpartial alpha = fracpartial mu_jpartial Z_j fracpartial Z_jpartial alpha = left( fracY_p - 1textln(10) Z_j left( Y_p + Z_j + gamma Z_j - 1 right) right) left( T_textmax - t_j right) \n\n fracpartial mu_jpartial beta = frac1left( t_j alpha + beta right) textln(10) \n fracpartial mu_jpartial alpha = fractleft( t_j alpha + beta right) textln(10) = t fracpartial mu_jpartial beta \nendaligned","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"such that","category":"page"},{"location":"fitting/log_amr/","page":"Logarithmic Age-Metallicity Relation","title":"Logarithmic Age-Metallicity Relation","text":"beginaligned\nfracpartial A_jkpartial beta = fracpartial A_jkpartial mu_j fracpartial mu_jpartial beta = fracpartial A_jkpartial mu_j fracpartial mu_jpartial Z_j fracpartial Z_jpartial beta \n= left( fracA_jk left( textMtextH_k - mu_j right)sigma^2 right) left( fracY_p - 1textln10 Z_j left( Y_p + Z_j + gamma Z_j - 1 right) right) \nfracpartial A_jkpartial alpha = fracpartial A_jkpartial mu_j fracpartial mu_jpartial alpha = fracpartial A_jkpartial mu_j fracpartial mu_jpartial Z_j fracpartial Z_jpartial alpha \n= left( fracA_jk left( textMtextH_k - mu_j right)sigma^2 right) left( fracY_p - 1textln10 Z_j left( Y_p + Z_j + gamma Z_j - 1 right) right) left( T_textmax - t_j right) \n= left( T_textmax - t_j right) fracpartial A_jkpartial beta \n\n fracpartial A_jkpartial beta = fracpartial A_jkpartial mu_j fracpartial mu_jpartial beta = left( fracA_jk left( textMtextH_k - mu_j right)sigma^2 right) left( frac1left( t_j alpha + beta right) textln(10) right) \n = fracA_jk left( textMtextH_k - mu_j right)textln(10) sigma^2 left( t_j alpha + beta right) \n fracpartial A_jkpartial alpha = fracpartial A_jkpartial mu_j fracpartial mu_jpartial alpha = t fracpartial A_jkpartial beta\nendaligned","category":"page"},{"location":"binaries/#binaries","page":"Multi-Star Systems","title":"Multi-Star Systems","text":"","category":"section"},{"location":"binaries/","page":"Multi-Star Systems","title":"Multi-Star Systems","text":"StarFormationHistories.AbstractBinaryModel\nStarFormationHistories.sample_system\nStarFormationHistories.NoBinaries\nStarFormationHistories.RandomBinaryPairs\nStarFormationHistories.BinaryMassRatio","category":"page"},{"location":"binaries/#StarFormationHistories.AbstractBinaryModel","page":"Multi-Star Systems","title":"StarFormationHistories.AbstractBinaryModel","text":"StarFormationHistories.AbstractBinaryModel is the abstract supertype for all types that are used to model multi-star systems in the package. All concrete subtypes must implement the StarFormationHistories.sample_system method and the Base.length method, which should return an integer indicating the number of stars per system that can be sampled by the model; this is equivalent to the length of the mass vector returned by sample_system. \n\n\n\n\n\n","category":"type"},{"location":"binaries/#StarFormationHistories.sample_system","page":"Multi-Star Systems","title":"StarFormationHistories.sample_system","text":"masses = sample_system(imf, rng::AbstractRNG, binarymodel::StarFormationHistories.AbstractBinaryModel)\n\nSimulates the effects of non-interacting, unresolved stellar companions on stellar photometry. Implementation depends on the choice of binarymodel.\n\nArguments\n\nimf: an object implementing rand(imf) to draw a random mass for a single star or a stellar system (depends on choice of binarymodel)\nrng::AbstractRNG: the random number generator to use when sampling stars\nbinarymodel::StarFormationHistories.AbstractBinaryModel: an instance of a binary model that determines which implementation will be used; currently provided options are NoBinaries, RandomBinaryPairs, and BinaryMassRatio.\n\nReturns\n\nmasses::SVector{N,eltype(imf)}: the masses of the individual stars sampled in the system in descending order where N is the maximum number of stars that can be sampled by the provided binarymodel as given by Base.length(binarymodel). \n\n\n\n\n\n","category":"function"},{"location":"binaries/#StarFormationHistories.NoBinaries","page":"Multi-Star Systems","title":"StarFormationHistories.NoBinaries","text":"NoBinaries()\n\nThe NoBinaries type indicates that no binaries of any kind should be created. \n\n\n\n\n\n","category":"type"},{"location":"binaries/#StarFormationHistories.RandomBinaryPairs","page":"Multi-Star Systems","title":"StarFormationHistories.RandomBinaryPairs","text":"RandomBinaryPairs(fraction::Real)\n\nThe RandomBinaryPairs type takes one argument 0 <= fraction::Real <= 1 that denotes the number fraction of binaries (e.g., 0.3 for 30% binary fraction) and will sample binaries as random pairs of two stars drawn from the same single-star IMF. This model will ONLY generate up to one additional star – it will not generate any 3+ star systems. This model typically incurs a 10–20% speed penalty relative to NoBinaries. \n\n\n\n\n\n","category":"type"},{"location":"binaries/#StarFormationHistories.BinaryMassRatio","page":"Multi-Star Systems","title":"StarFormationHistories.BinaryMassRatio","text":"BinaryMassRatio(fraction::Real, qdist::Distributions.ContinuousUnivariateDistribution=Distributions.Uniform())\n\nThe BinaryMassRatio type takes two arguments; the binary fraction 0 <= fraction::Real <= 1 and a continuous univariate distribution qdist from which to sample binary mass ratios, defined as the ratio of the secondary mass to the primary mass: q = textM_S textM_P. The provided qdist must have the proper support of (minimum(qdist) >= 0) & (maximum(qdist) <= 1); users may find the Distributions.truncated method useful for enforcing this support on more general distributions. The default qdist is a uniform distribution from 0.1 to 1, which appears to give reasonably good agreement to observations (see, e.g., Goodwin 2013). \n\n\n\n\n\n","category":"type"},{"location":"helpers/#helpers","page":"Helper Functions","title":"Helper Functions","text":"","category":"section"},{"location":"helpers/#Distances-and-Sizes","page":"Helper Functions","title":"Distances and Sizes","text":"","category":"section"},{"location":"helpers/","page":"Helper Functions","title":"Helper Functions","text":"StarFormationHistories.arcsec_to_pc\nStarFormationHistories.pc_to_arcsec\nStarFormationHistories.distance_modulus\nStarFormationHistories.distance_modulus_to_distance","category":"page"},{"location":"helpers/#StarFormationHistories.arcsec_to_pc","page":"Helper Functions","title":"StarFormationHistories.arcsec_to_pc","text":"arcsec_to_pc(arcsec, dist_mod)\n\nConverts on-sky angle in arcseconds to physical separation based on distance modulus under the small-angle approximation.\n\nr 10^μ5 + 1 times textatan(θ3600)\n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.pc_to_arcsec","page":"Helper Functions","title":"StarFormationHistories.pc_to_arcsec","text":"pc_to_arcsec(pc, dist_mod)\n\nInverse of arcsec_to_pc.\n\nθ texttanleft( r 10^μ5 + 1 right) times 3600\n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.distance_modulus","page":"Helper Functions","title":"StarFormationHistories.distance_modulus","text":"distance_modulus(distance)\n\nFinds distance modulus for distance in parsecs.\n\nμ = 5 times log_10(d) - 5\n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.distance_modulus_to_distance","page":"Helper Functions","title":"StarFormationHistories.distance_modulus_to_distance","text":"distance_modulus_to_distance(dist_mod)\n\nConverts distance modulus to distance in parsecs.\n\nd = 10^μ5 + 1\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Magnitudes-and-Luminosities","page":"Helper Functions","title":"Magnitudes and Luminosities","text":"","category":"section"},{"location":"helpers/#metallicity_helpers","page":"Helper Functions","title":"Metallicities","text":"","category":"section"},{"location":"helpers/","page":"Helper Functions","title":"Helper Functions","text":"StarFormationHistories.Y_from_Z\nStarFormationHistories.X_from_Z\nStarFormationHistories.MH_from_Z\nStarFormationHistories.dMH_dZ\nStarFormationHistories.Z_from_MH\nStarFormationHistories.mdf_amr","category":"page"},{"location":"helpers/#StarFormationHistories.Y_from_Z","page":"Helper Functions","title":"StarFormationHistories.Y_from_Z","text":"Y_from_Z(Z, Y_p=0.2485, γ=1.78)\n\nCalculates the helium mass fraction (Y) for a star given its metal mass fraction (Z) using the approximation Y = Y_p + γ * Z, with Y_p being the primordial helium abundance Y_p=0.2485 as assumed for PARSEC isochrones and γ=1.78 matching the input scaling for PARSEC as well. \n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.X_from_Z","page":"Helper Functions","title":"StarFormationHistories.X_from_Z","text":"X_from_Z(Z[, Yp, γ])\n\nCalculates the hydrogen mass fraction (X) for a star given its metal mass fraction (Z) via X = 1 - (Z + Y), with the helium mass fraction Y approximated via StarFormationHistories.Y_from_Z. You may also provide the primordial helium abundance Y_p and γ such that Y = Y_p + γ * Z; these are passed through to X_from_Z. \n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.MH_from_Z","page":"Helper Functions","title":"StarFormationHistories.MH_from_Z","text":"MH_from_Z(Z, solZ=0.01524; Y_p = 0.2485, γ = 1.78)\n\nCalculates [M/H] = log(Z/X) - log(Z/X)⊙. Given the provided solar metal mass fraction solZ, it calculates the hydrogen mass fraction X for both the Sun and the provided Z with StarFormationHistories.X_from_Z. You may also provide the primordial helium abundance Y_p and γ such that Y = Y_p + γ * Z; these are passed through to X_from_Z. \n\nThe present-day solar Z is measured to be 0.01524 (Caffau et al. 2011), but for PARSEC isochrones an [M/H] of 0 corresponds to Z=0.01471. This is because of a difference between the Sun's initial and present helium content caused by diffusion. If you want to reproduce PARSEC's scaling, you should set solZ=0.01471.\n\nThis function is an approximation and may not be suitable for precision calculations.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.dMH_dZ","page":"Helper Functions","title":"StarFormationHistories.dMH_dZ","text":"dMH_dZ(Z, solZ=0.01524; Y_p = 0.2485, γ = 1.78)\n\nPartial derivative of MH_from_Z with respect to the input metal mass fraction Z. Used for some optimizations. \n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.Z_from_MH","page":"Helper Functions","title":"StarFormationHistories.Z_from_MH","text":"Z_from_MH(MH, solZ=0.01524; Y_p = 0.2485, γ = 1.78)\n\nCalculates metal mass fraction Z assuming\n\nthe PARSEC relation for the helium mass fraction Y = Y_p + γ * Z with primordial helium abundance Y_p = 0.2485, and γ = 1.78, and\nthe solar metal mass fraction solZ = 0.01524.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.mdf_amr","page":"Helper Functions","title":"StarFormationHistories.mdf_amr","text":"(unique_MH, mass_mdf) =\nmdf_amr(coeffs::AbstractVector{<:Number},\n logAge::AbstractVector{<:Number},\n metallicities::AbstractVector{<:Number})\n\nCalculates the mass-weighted metallicity distribution function given a set of stellar mass coefficients coeffs for stellar populations with logarithmic ages logAge=log10(age [yr]) and metallicities given by metallicities. This is calculated as\n\nP_j = frac sum_k r_jk textM textH_ksum_jk r_jk textM textH_k\n\nwhere r_jk are the elements of coeffs where j indexes over unique entries in logAge and k indexes over unique entries in metallicities. This is the same nomenclature used in the the documentation on constrained metallicity evolutions.\n\nExamples\n\njulia> mdf_amr([1.0, 2.0, 1.0], [10, 10, 10], [-2, -1.5, -1])\n([-2.0, -1.5, -1.0], [0.25, 0.5, 0.25])\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Photometric-Error-and-Completeness-Models","page":"Helper Functions","title":"Photometric Error and Completeness Models","text":"","category":"section"},{"location":"helpers/","page":"Helper Functions","title":"Helper Functions","text":"StarFormationHistories.Martin2016_complete\nStarFormationHistories.exp_photerr","category":"page"},{"location":"helpers/#StarFormationHistories.Martin2016_complete","page":"Helper Functions","title":"StarFormationHistories.Martin2016_complete","text":"η(m) = Martin2016_complete(m, A, m50, ρ)\n\nCompleteness model of Martin et al. 2016 implemented as their Equation 7:\n\neta(m) = fracA1 + textexp left( fracm - m_50rho right)\n\nm is the magnitude of interest, A is the maximum completeness, m50 is the magnitude at which the data are 50% complete, and ρ is an effective slope modifier.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#StarFormationHistories.exp_photerr","page":"Helper Functions","title":"StarFormationHistories.exp_photerr","text":"exp_photerr(m, a, b, c, d)\n\nExponential model for photometric errors of the form\n\nsigma(m) = a^b times left( m-c right) + d\n\nReported values for some HST data were a=1.05, b=10.0, c=32.0, d=0.01. \n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/#High-Level-Methods-for-Unconstrained-Fitting","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"","category":"section"},{"location":"fitting/unconstrained/#Maximum-Likelihood-Optimization","page":"High-Level Methods for Unconstrained Fitting","title":"Maximum Likelihood Optimization","text":"","category":"section"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Template construction is by far the most complicated step in the fitting procedure. Once your templates have been constructed, fitting them to an observed Hess diagram amounts to maximization of the Poisson likelihood ratio (Dolphin 2002). It is possible to construct more complicated hierarchical models including things like metallicity distribution functions; we discuss these in the next section. In this section we discuss methods for fitting where the only constraint is that star formation rates cannot be negative. We provide the StarFormationHistories.construct_x0 method to help with setting the initial guess for this optimization. ","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.construct_x0","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.construct_x0","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.construct_x0","text":"x0::typeof(logage) = construct_x0(logAge::AbstractVector{T},\n T_max::Number;\n normalize_value::Number=one(T)) where T <: Number\n\nGenerates a vector of initial stellar mass normalizations for input to fit_templates or hmc_sample with a total stellar mass of normalize_value such that the implied star formation rate is constant across the provided logAge vector that contains the log10(Age [yr]) of each isochrone that you are going to input as models. For the purposes of computing the constant star formation rate, the provided logAge are treated as left-bin edges, with the final right-bin edge being T_max, which has units of Gyr. For example, you might have logAge=[6.6, 6.7, 6.8] in which case a final logAge of 6.9 would give equal bin widths. In this case you would set T_max = exp10(6.9) / 1e9 ≈ 0.0079 so that the width of the final bin for the star formation rate calculation has the same log10(Age [yr]) step as the other bins.\n\nExamples\n\njulia> x0 = construct_x0(repeat([7.0,8.0,9.0],3), 10.0; normalize_value=5.0)\n9-element Vector{Float64}: ...\n\njulia> sum(x0)\n4.99... # Close to `normalize_value`.\n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"When it comes to performing the optimization, the simplest method we offer is StarFormationHistories.fit_templates_lbfgsb. This will optimize one coefficient per template; there is no overarching metallicity evolution or other constraint, besides that the stellar masses of the populations cannot be negative. This performs a maximum likelihood optimization with the bounded quasi-Newton LBFGS method as implemented in L-BFGS-B and wrapped in LBFGS.jl with analytic gradients. It is fast and converges fairly reliably, even when the initial guess is not particularly close to the maximum likelihood estimate. It provides no uncertainty estimation. It is normal for some of the coefficients to converge to zero.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.fit_templates_lbfgsb","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.fit_templates_lbfgsb","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.fit_templates_lbfgsb","text":"(-logL, coeffs) = \nfit_templates_lbfgsb(models::AbstractVector{T},\n data::AbstractMatrix{<:Number};\n x0::AbstractVector{<:Number} = ones(S,length(models)),\n factr::Number=1e-12,\n pgtol::Number=1e-5,\n iprint::Integer=0,\n kws...) where {S <: Number, T <: AbstractMatrix{S}}\n\nFinds the coefficients coeffs that maximize the Poisson likelihood ratio (equations 7–10 in Dolphin 2002) for the composite Hess diagram model sum(models .* coeffs) given the provided templates models and the observed Hess diagram data using the box-constrained LBFGS method provided by LBFGSB.jl. \n\nArguments\n\nmodels::AbstractVector{AbstractMatrix{<:Number}}: the list of template Hess diagrams for the simple stellar populations (SSPs) being considered; all must have the same size.\ndata::AbstractMatrix{<:Number}: the observed Hess diagram; must match the size of the templates contained in models.\n\nKeyword Arguments\n\nx0: The vector of initial guesses for the stellar mass coefficients. You should basically always be calculating and passing this keyword argument; we provide StarFormationHistories.construct_x0 to prepare x0 assuming constant star formation rate, which is typically a good initial guess.\nfactr::Number: Keyword argument passed to LBFGSB.lbfgsb; essentially a relative tolerance for convergence based on the inter-iteration change in the objective function.\npgtol::Number: Keyword argument passed to LBFGSB.lbfgsb; essentially a relative tolerance for convergence based on the inter-iteration change in the projected gradient of the objective.\niprint::Integer: Keyword argument passed to LBFGSB.lbfgsb controlling how much information is printed to the terminal. Setting to 1 can sometimes be helpful to diagnose convergence issues. Setting to -1 will disable printing.\n\nOther kws... are passed to LBFGSB.lbfgsb.\n\nReturns\n\n-logL::Number: the minimum negative log-likelihood found by the optimizer.\ncoeffs::Vector{<:Number}: the maximum likelihood estimate for the coefficient vector. \n\nNotes\n\nIt can be helpful to normalize your models to contain realistic total stellar masses to aid convergence stability; for example, if the total stellar mass of your population is 10^7 solar masses, then you might normalize your templates to contain 10^3 solar masses. If you are using partial_cmd_smooth to construct the templates, you can specify this normalization via the normalize_value keyword. \n\n\n\n\n\nfit_templates_lbfgsb(models::AbstractMatrix{S},\n data::AbstractVector{<:Number};\n x0::AbstractVector{<:Number} = ones(S,size(models,2)),\n factr::Number=1e-12,\n pgtol::Number=1e-5,\n iprint::Integer=0,\n kws...) where S <: Number\n\nThis call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"This method simply minimizes the negative logarithm of the Poisson likelihood ratio (Equation 10 in Dolphin 2002),","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"- textln mathscrL = sum_i m_i - n_i times left( 1 - textln left( fracn_im_i right) right)","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"where m_i is bin i of the complex model and n_i is bin i of the observed Hess diagram; this can therefore be thought of as computing the maximum likelihood estimate.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"We also provide StarFormationHistories.fit_templates_fast, which is the fastest method we offer for deriving a maximum likelihood estimate for the type of model described above.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.fit_templates_fast","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.fit_templates_fast","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.fit_templates_fast","text":"(coeffs::Vector{::eltype(x0)}, result::Optim.MultivariateOptimizationResults) =\nfit_templates_fast(models::AbstractVector{T},\n data::AbstractMatrix{<:Number};\n x0::AbstractVector{<:Number} = ones(S,length(models)),\n kws...)\n where {S <: Number, T <: AbstractMatrix{S}}\n\nFinds only the maximum likelihood estimate (MLE) for the coefficients coeffs given the provided data such that the best-fit composite Hess diagram model is sum(models .* coeffs). This is a simplification of the main fit_templates function, which will return the MLE as well as the maximum a posteriori estimate, and further supports uncertainty quantification. For additional details on arguments to this method, see the documentation for fit_templates. \n\nThis method optimizes parameters θ such that coeffs = θ.^2 – this allows for faster convergence than both the fit_templates_lbfgsb method, which does not use a variable transformation, and the logarithmic transformation used in fit_templates. However, the inverse Hessian is not useful for uncertainty estimation under this transformation. As such this method only returns the MLE for coeffs as a vector and the result object returned by Optim.optimize. While this method offers fewer features than fit_templates, this method's runtime is typically half as long (or less). As such, this method is recommended for use in performance-sensitive applications like hierarchical models or hyperparameter estimation where the additional features of fit_templates are unnecessary. In these applications, the value of the objective function at the derived MLE is typically desired as well; this can be obtained the from result::Optim.MultivariateOptimizationResults object as Optim.minimum(result). Note that this will return the negative loglikelihood, which is what is minimized in this application.\n\nNotes\n\nBy passing additional convergence keyword arguments supported by Optim.Options (see this guide), it is possible to converge to the MLE in fewer than 30 iterations with fewer than 100 calls to the likelihood and gradient methods. For example, the main convergence criterion is typically the magnitude of the gradient vector, which by default is g_abstol=1e-8, terminating the optimization when the magnitude of the gradient is less than 1e-8. We find results are typically sufficiently accurate with g_abstol=1e-3, which often uses half as many objective evaluations as the default value.\n\n\n\n\n\nfit_templates_fast(models::AbstractMatrix{S},\n data::AbstractVector{<:Number};\n x0::AbstractVector{<:Number} = ones(S,size(models,2)),\n kws...)\n where S <: Number\n\nThis call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/#Posterior-Sampling:-MCMC","page":"High-Level Methods for Unconstrained Fitting","title":"Posterior Sampling: MCMC","text":"","category":"section"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"For low-dimensional problems, Markov Chain Monte Carlo (MCMC) methods can be an efficient way to sample the posterior and obtain uncertainty estimates on the fitting coefficients r_j. We provide StarFormationHistories.mcmc_sample for this purpose. Internally this uses the multi-threaded affine-invariant MCMC sampler from KissMCMC.jl to perform the sampling, which is based on the same algorithm as Python's emcee (specifically, their emcee.moves.StretchMove). There are other MCMC packages like AdvancedMH.jl that offer additional features like distributed execution. ","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.mcmc_sample","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.mcmc_sample","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.mcmc_sample","text":"result::MCMCChains.Chains =\nmcmc_sample(models::AbstractVector{<:AbstractMatrix{T}},\n data::AbstractMatrix{S},\n x0::Union{AbstractVector{<:AbstractVector{<:Number}}, AbstractMatrix{<:Number}},\n nwalkers::Integer,\n nsteps::Integer;\n nburnin::Integer=0,\n nthin::Integer=1,\n a_scale::Number=2.0,\n use_progress_meter::Bool=true)\nmcmc_sample(models::AbstractMatrix{<:Number},\n data::AbstractVector{<:Number},\n args...; kws...)\n\nSamples the posterior of the coefficients coeffs such that the full model of the observational data is sum(models .* coeffs). Uses the Poisson likelihood ratio as defined by equations 7–10 of Dolphin 2002. Sampling is done using the affine-invariant MCMC sampler implemented in KissMCMC.jl, which is analogous to Python's emcee.moves.StretchMove. This method will automatically parallelize over threads. If you need distributed execution, you may want to look into AdvancedMH.jl.\n\nThe second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\nArguments\n\nmodels::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.\ndata::AbstractMatrix{<:Number} is the Hess diagram for the observed data.\nx0::Union{AbstractVector{<:AbstractVector{<:Number}}, AbstractMatrix{<:Number}} are the initial positions for the MCMC walkers. If providing a vector of vectors, it must be a vector of length nwalkers with each internal vector having length equal to length(models). You can alternatively provide a matrix of size (nwalkers, length(models)) or (length(models), nwalkers).\nnwalkers::Integer is the number of unique walkers or chains to use.\nnsteps::Integer is the number of steps evolve the walkers for.\n\nKeyword Arguments\n\nnburnin::Integer=0 is the number of steps to discard from the start of each chain.\nnthin::Integer=1 is the factor by which to thin the chain; walker positions will only be saved every nthin steps.\na_scale::Number=2.0 is the scale parameter for the stretch move; probably shouldn't need to be changed.\nuse_progress_Meter::Bool=true indicates whether or not to show a progress bar during the MCMC procedure.\n\nReturns\n\nresult is a MCMCChains.Chains instance which enables easy calculation of diagnostic and summary statistics. This type can be indexed and used like a 3-D array of samples with shape (nsteps, length(models), nwalkers).\n\nNotes\n\nWhen displaying result to the terminal it will display summary statistics (MCMCChains.summarystats) and quantiles (MCMCChains.quantile) by calling the MCMCChains.describe method. This can take a second but is nice to have as an option.\nThe highest posterior density interval, which is the narrowest credible interval that includes the posterior mode, can be calculated with the MCMCChains.hpd method. \nIf you want to extract the array of samples from the MCMCChains.Chains object, you can index result.value – this will return an AxisArray but can be converted to a normal array with Array(result.value).\n\nExamples\n\nimport Distributions: Poisson\ncoeffs = rand(10) # SFH coefficients we want to sample\nmodels = [rand(100,100) .* 100 for i in 1:length(coeffs)] # Vector of model Hess diagrams\ndata = rand.(Poisson.( sum(models .* coeffs) ) ) # Poisson-sample the model `sum(models .* coeffs)`\nnwalkers = 1000\nnsteps = 400\nx0 = rand(nwalkers, length(coeffs)) # Initial walker positions\nresult = mcmc_sample(models, data, x0, nwalkers, nsteps) # Sample\nChains MCMC chain (400×10×1000 Array{Float64, 3}) ...\n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/#Posterior-Sampling:-Change-of-Variables-and-HMC","page":"High-Level Methods for Unconstrained Fitting","title":"Posterior Sampling: Change of Variables and HMC","text":"","category":"section"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Dolphin 2013 examined methods for obtaining uncertainties on the fitted coefficients (the r_j in Equation 1 of Dolphin 2002) and found that the Hamiltonian Monte Carlo (HMC) approach allowed for relatively efficient sampling of the posterior distribution when considering many isochrones in the modelling process. HMC requires that the variables to be fit are continuous over the real numbers and so requires a change of variables. Rather than sampling the variables r_j directly, we can sample theta_j = textln left( r_j right) such that the sampled variables are continuous over the real numbers -infty theta_j infty while the r_j=textexp left( theta_j right) coefficients are bounded from 0 r_j infty. Using a logarithmic transformation has the additional benefit that the gradient of the Poisson likelihood ratio is still continuous and easy to compute analytically.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"While maximum likelihood estimates are invariant under variable transformations, sampling methods like HMC are not, as formally the posterior being sampled from is a distribution and therefore must be integrable over the sampling coefficients. We can write the posterior from which we wish to sample as","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"beginaligned\np(r_j D) = fracp(D r_j) p(r_j)Z \np(boldsymbolr D) = frac1Z prod_j p(D r_j) p(r_j) \n-textln p(boldsymbolr D) = textln Z - sum_j textln p(D r_j) + textln p(r_j) \n= textln Z - textln mathscrL + sum_j textln p(r_j)\nendaligned","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"where Z is the Bayesian evidence (a constant that can be neglected for sampling methods), p left( r_j right) is the prior on the star formation history, and mathscrL is the Poisson likelihood ratio discussed above. An uninformative (and unnormalized) prior on the coefficients r_j could take the form of","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"p(r_j) = begincases\n1 r_j geq 0\n0 r_j 0\nendcases","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"such that, if the coefficients r_j are guaranteed to be positive, the final term becomes zero (since textln(1)=0) and","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"-textln p(boldsymbolr D) = textln Z - textln mathscrL","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"When sampling with methods like HMC, constants like textln Z can be neglected and -textln p(boldsymbolr D) propto - textln mathscrL such that the posterior is approximated by the likelihood surface.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Let us consider now what happens when we wish to do a variable transformation from r_j to theta_j = textln (r_j). From above we can write the posterior as","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"p(r_j D) = fracp(D r_j) p(r_j)Z ","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Under the change of variables formula we can write","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"beginaligned\np(theta_j D) = p(r_j D) left fracd r_jd theta_j right \n= p(r_j D) left fracd theta_jd r_j right^-1\nendaligned","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"where left fracd theta_jd r_j right^-1 is often called the Jacobian correction. We choose theta_j such that","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"beginaligned\ntheta_j = textln ( r_j ) \nleft fracd theta_jd r_j right = frac1r_j \nr_j = textexp (theta_j) \nendaligned","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"which leads to a posterior of","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"p(theta_j D) = textexp (theta_j) times p(textexp (theta_j) D) = r_j times p(r_j D) ","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"We can then write the product over the theta_j as","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"beginaligned\np(boldsymboltheta D) = frac1Z prod_j r_j p(D r_j) p(r_j) \n-textln p(boldsymboltheta D) = textln Z - sum_j textln (r_j) + textln p(D r_j) + textln p(r_j) \n= textln Z - sum_j textln p(D r_j) + textln p(r_j) - sum_j theta_j \n= -textln p(boldsymbolr D) - sum_j theta_j \n= -textln p(boldsymbolr D) - sum_j textln (r_j)\nendaligned","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"The choice of a logarithmic transformation means that the negative logarithm of the posterior (which is what HMC uses for its objective function) has this very simple form which allows for simple analytic gradients as well. Once samples of theta have been obtained from this distribution via HMC or any other sampling method, they can be directly transformed back to the standard coefficients r_j = textexp(theta_j).","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"The method hmc_sample implements this approach for sampling the theta_j coefficients; these samples can then be used to estimate random uncertainties on the derived star formation history.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.hmc_sample","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.hmc_sample","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.hmc_sample","text":"hmc_sample(models::AbstractVector{T},\n data::AbstractMatrix{<:Number},\n nsteps::Integer [, nchains::Integer];\n rng::Random.AbstractRNG=Random.default_rng(),\n kws...)\n where {S <: Number, T <: AbstractMatrix{S}}\nhmc_sample(models::AbstractMatrix{S},\n data::AbstractVector{<:Number},\n nsteps::Integer;\n rng::AbstractRNG=default_rng(),\n kws...)\n where S <: Number\n\nFunction to sample the posterior of the coefficients coeffs such that the full model of the observational data is sum(models .* coeffs). Uses the Poisson likelihood ratio as defined by equations 7–10 of Dolphin 2002 along with a logarithmic transformation of the coeffs so that the fitting variables are continuous and differentiable over all reals. Sampling is done using the No-U-Turn sampler as implemented in DynamicHMC.jl, which is a form of dynamic Hamiltonian Monte Carlo.\n\nThe second call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\nArguments\n\nmodels::AbstractVector{<:AbstractMatrix{<:Number}} is a vector of equal-sized matrices that represent the template Hess diagrams for the simple stellar populations that compose the observed Hess diagram.\ndata::AbstractMatrix{<:Number} is the Hess diagram for the observed data.\nnsteps::Integer is the number of samples to draw per chain.\n\nOptional Arguments\n\nnchains::Integer: If this argument is not provided, this method will return a single chain. If this argument is provided, it will sample nchains chains using all available Julia threads and will return a vector of the individual chains.\n\nKeyword Arguments\n\nrng::Random.AbstractRNG is the random number generator that will be passed to DynamicHMC.jl. If nchains is provided this method will attempt to sample in parallel, requiring a thread-safe rng such as that provided by Random.default_rng(). \n\nAll other keyword arguments kws... will be passed to DynamicHMC.mcmc_with_warmup or DynamicHMC.mcmc_keep_warmup depending on whether nchains is provided.\n\nReturns\n\nIf nchains is not provided, returns a NamedTuple as summarized in DynamicHMC.jl's documentation. In short, the matrix of samples can be extracted and transformed as exp.( result.posterior_matrix ). Statistics about the chain can be obtained with DynamicHMC.Diagnostics.summarize_tree_statistics(result.tree_statistics); you want to see a fairly high acceptance rate (>0.5) and the majority of samples having termination criteria being \"turning.\" See DynamicHMC.jl's documentation for more information.\nIf nchains is provided, returns a vector of length nchains of the same NamedTuples described above. The samples from each chain in the returned vector can be stacked to a single (nsamples, nchains, length(models)) matrix with DynamicHMC.stack_posterior_matrices(result). \n\nExamples\n\nimport DynamicHMC\nimport StatFormationHistories: hmc_sample\nimport Statistics: mean\n# Run sampler using progress meter to monitor progress\n# assuming you have constructed some templates `models` and your observational Hess diagram `data`\nresult = hmc_sample( models, data, 1000; reporter=DynamicHMC.ProgressMeterReport())\n# The chain values are stored in result.posterior matrix; extract them with `result.posterior_matrix`\n# An exponential transformation is needed since the optimization internally uses a logarithmic \n# transformation and samples log(θ) rather than θ directly. \nmc_matrix = exp.( result.posterior_matrix )\n# We can look at some statistics from the chain; want to see high acceptance rate (>0.5) and large % of\n# \"turning\" for termination criteria. \nDynamicHMC.Diagnostics.summarize_tree_statistics(result.tree_statistics)\n Hamiltonian Monte Carlo sample of length 1000\n acceptance rate mean: 0.92, 5/25/50/75/95%: 0.65 0.88 0.97 1.0 1.0\n termination: divergence => 0%, max_depth => 0%, turning => 100%\n depth: 0 => 0%, 1 => 64%, 2 => 36%\n# mc_matrix has size `(length(models), nsteps)` so each column is an independent\n# sample of the SFH as defined by the coefficients and the rows contain the samples\n# for each parameter. \nmstar_tot = sum.(eachcol(mc_matrix)) # Total stellar mass of the modelled system per sample\nmc_means = mean.(eachrow(mc_matrix)) # Mean of each coefficient evaluated across all samples\n# Example with multiple chains sampled in parallel via multi-threading\nimport Threads\nt_result = hmc_sample( models, data, 1000, Threads.nthreads(); reporter=DynamicHMC.ProgressMeterReport())\n# Combine the multiple chains into a single matrix and transform\n# Can then use the same way as `mc_matrix` above\nmc_matrix = exp.( DynamicHMC.pool_posterior_matrices(t_result) )\n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"See the DynamicHMC.jl documentation for more information on how to use the chains that are output by this method.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Inspection of the samples generated by hmc_sample shows that the posterior defined by the above model is typically smooth, well-behaved, and unimodal. In particular, we find that the sampled r_j for coefficients that are non-zero in the MLE are approximately Gaussian distributed while the logarithms of the sampled r_j are roughly Gaussian distributed for coefficients that are zero in the MLE; i.e.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"begincases\nX_j sim mathcalN hat r_j 0 \ntextln left( X_j right) sim mathcalN hat r_j = 0 \nendcases","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"where X_j are the samples of r_j obtained from the posterior and hat r_j is the maximum likelihood estimate of r_j. ","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"This indicates we may be able to approximate the posterior in the region surrounding the maximum a posteriori (MAP) value by the inverse of the Hessian matrix (see, e.g., Dovi et al. 1991), allowing us to estimate parameter uncertainties very cheaply. The inverse of the Hessian matrix is exactly equal to the variance-covariance matrix of the parameters for a Gaussian probability distribution; for other probability distributions, the inverse of the Hessian approximates the variance-covariance matrix of the parameters when the second-order expansion defined by the Hessian at the maximum is a reasonable approximation to the real objective function being optimized. A particularly simple form arises when the logarithm of the objective is quadratic in the fitting parameters, as in the Gaussian case, because the second derivatives of the objective are constant and do not depend on the fitting parameters or the MAP estimate.","category":"page"},{"location":"fitting/unconstrained/#Maximum-a-Posteriori-Optimization","page":"High-Level Methods for Unconstrained Fitting","title":"Maximum a Posteriori Optimization","text":"","category":"section"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Direct computation of the Hessian and its inverse is expensive, so we'd like another way to obtain it. The first-order, quasi-Newton BFGS optimization algorithm provides such a method as it iteratively builds a dense approximation to the inverse Hessian using the change in the gradient of the objective, which we can compute analytically. It is, however, much less memory efficient than the LBFGS algorithm we use in StarFormationHistories.fit_templates_lbfgsb. For moderate isochrone grids up to a few hundred model templates, this is not a problem. Beyond this it may be better to use StarFormationHistories.fit_templates_lbfgsb to obtain the MLE and hmc_sample to obtain posterior samples.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"We implement this optimization scheme in fit_templates, which is our recommended method for unconstrained SFH fitting (i.e., direct fitting of the r_j coefficients). See the next section for notes on more complicated, hierarchical models that can incorporate features like metallicity distribution functions.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.fit_templates\nStarFormationHistories.LogTransformFTResult","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.fit_templates","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.fit_templates","text":"result = fit_templates(models::AbstractVector{T},\n data::AbstractMatrix{<:Number};\n x0::AbstractVector{<:Number} = ones(S,length(models)),\n kws...) where {S <: Number, T <: AbstractMatrix{S}}\n\nFinds both maximum likelihood estimate (MLE) and maximum a posteriori estimate (MAP) for the coefficients coeffs such that the composite Hess diagram model is sum(models .* coeffs) using the provided templates models and the observed Hess diagram data. Utilizes the Poisson likelihood ratio (equations 7–10 in Dolphin 2002) for the likelihood of the data given the model. See the examples in the documentation for comparisons of the results of this method and hmc_sample which samples the posterior via Hamiltonian Monte Carlo. \n\nArguments\n\nmodels::AbstractVector{AbstractMatrix{<:Number}}: the list of template Hess diagrams for the simple stellar populations (SSPs) being considered; all must have the same size.\ndata::AbstractMatrix{<:Number}: the observed Hess diagram; must match the size of the templates contained in models.\n\nKeyword Arguments\n\nx0: The vector of initial guesses for the stellar mass coefficients. You should basically always be calculating and passing this keyword argument; we provide StarFormationHistories.construct_x0 to prepare x0 assuming constant star formation rate, which is typically a good initial guess.\n\nOther kws... are passed to Optim.options to set things like convergence criteria for the optimization. \n\nReturns\n\nresult is a NamedTuple containing two StarFormationHistories.LogTransformFTResult. The two components of result are result.map or result[1], which contains the results of the MAP optimization, and result.mle or result[2], which contains the results of the MLE optimization. The documentation for StarFormationHistories.LogTransformFTResult contains more information about these types, but briefly they contain the following fields, accessible as, e.g., result.map.μ, result.map.σ, etc.:\n\nμ::Vector{<:Number} are the optimized coeffs at the maximum.\nσ::Vector{<:Number} are the standard errors on the coeffs μ calculated from an estimate of the inverse Hessian matrix evaluated at μ. The inverse of the Hessian matrix at the maximum of the likelihood (or posterior) is a estimator for the variance-covariance matrix of the parameters, but is only accurate when the second-order expansion given by the Hessian at the maximum is a good approximation to the function being optimized (i.e., when the optimized function is approximately quadratic around the maximum; see Dovi et al. 1991 for more information). We find this is often the case for the MAP estimate, but the errors found for coefficients that are ≈0 in the MLE are typically unrealistically small. For coefficients significantly greater than 0, the σ values from the MAP and MLE are typically consistent to 5–10%.\ninvH::Matrix{<:Number} is the estimate of the inverse Hessian matrix at μ that was used to derive σ. The optimization is done under a logarithmic transform, such that θ[j] = log(coeffs[j]) are the actual parameters optimized, so the entries in the Hessian are actually\n\nH^(jk) ( boldsymbolhat theta ) = left fracpartial^2 J(boldsymboltheta)partial theta_j partial theta_k rightvert_boldsymboltheta=boldsymbolhat theta\n\nresult is the full object returned by the optimization from Optim.jl; this is of type Optim.MultivariateOptimizationResults. Remember that the optimization is done with parameters θ[j] = log(coeffs[j]) when dealing with this raw output. This means that, for example, we calculate result.map.μ as exp.(Optim.minimizer(result.map.result)).\n\nThe special property of the StarFormationHistories.LogTransformFTResult type is that you can draw a set of N::Integer random parameter samples from the result using the inverse Hessian approximation discussed above by doing rand(result.map, N). This type implements the random sampling API of Distributions.jl so the other standard sampling methods should work as well. In our tests these samples compare very favorably against those from hmc_sample, which samples the posterior via Hamiltonian Monte Carlo and is therefore more robust but much more expensive. We compare these methods in the examples.\n\nNotes\n\nThis method uses the BFGS method from Optim.jl internally because it builds and tracks the inverse Hessian matrix approximation which can be used to estimate parameter uncertainties. BFGS is much more memory-intensive than LBFGS (as used for StarFormationHistories.fit_templates_lbfgsb) for large numbers of parameters (equivalently, many models), so you should consider LBFGS to solve for the MLE along with hmc_sample to sample the posterior if you are using a large grid of models (greater than a few hundred).\nThe BFGS implementation we use from Optim.jl uses BLAS operations during its iteration. The OpenBLAS that Julia ships with will often default to running on multiple threads even if Julia itself is started with only a single thread. You can check the current number of BLAS threads with import LinearAlgebra: BLAS; BLAS.get_num_threads(). For the problem sizes typical of this function we actually see performance regression with larger numbers of BLAS threads. For this reason you may wish to use BLAS in single-threaded mode; you can set this as import LinearAlgebra: BLAS; BLAS.set_num_threads(1).\n\n\n\n\n\nfit_templates(models::AbstractMatrix{S},\n data::AbstractVector{<:Number};\n x0::AbstractVector{<:Number} = ones(S,length(models)),\n kws...) where S <: Number\n\nThis call signature supports the flattened formats for models and data. See the notes for the flattened call signature of StarFormationHistories.composite! for more details.\n\n\n\n\n\n","category":"function"},{"location":"fitting/unconstrained/#StarFormationHistories.LogTransformFTResult","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.LogTransformFTResult","text":"LogTransformFTResult(μ::AbstractVector{<:Number},\n σ::AbstractVector{<:Number},\n invH::AbstractMatrix{<:Number},\n result)\n\nType for containing the maximum likelihood estimate (MLE) and maximum a posteriori (MAP) results from fit_templates. The fitted coefficients are available in the μ field. Estimates of the standard errors are available in the σ field. These have both been transformed from the native logarithmic fitting space into natural units (i.e., stellar mass or star formation rate).\n\ninvH contains the estimated inverse Hessian of the likelihood / posterior at the maximum point in the logarithmic fitting units. result is the full result object returned by the optimization routine.\n\nThis type is implemented as a subtype of Distributions.Sampleable{Multivariate, Continuous} to enable sampling from an estimate of the likelihood / posterior distribution. We approximate the distribution as a multivariate Gaussian in the native (logarithmically transformed) fitting variables with covariance matrix invH and means log.(μ). We find this approximation is good for the MAP result but less robust for the MLE. You can obtain N::Integer samples from the distribution by rand(R, N) where R is an instance of this type; this will return a size length(μ) x N matrix, or fail if invH is not positive definite.\n\nExamples\n\njulia> result = fit_templates(models, data);\n\njulia> typeof(result.map)\nStarFormationHistories.LogTransformFTResult{...}\n\njulia> size(rand(result.map, 3)) == (length(models),3)\ntrue\n\n\n\n\n\n","category":"type"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"Once you have obtained stellar mass coefficients from the above methods, you can convert them into star formation rates and compute per-age mean metallicities with StarFormationHistories.calculate_cum_sfr.","category":"page"},{"location":"fitting/unconstrained/","page":"High-Level Methods for Unconstrained Fitting","title":"High-Level Methods for Unconstrained Fitting","text":"StarFormationHistories.calculate_cum_sfr","category":"page"},{"location":"fitting/unconstrained/#StarFormationHistories.calculate_cum_sfr","page":"High-Level Methods for Unconstrained Fitting","title":"StarFormationHistories.calculate_cum_sfr","text":"(unique_logAge, cum_sfh, sfr, mean_MH) =\n calculate_cum_sfr(coeffs::AbstractVector,\n logAge::AbstractVector,\n MH::AbstractVector,\n T_max::Number;\n normalize_value=1,\n sorted::Bool=false)\n\nCalculates cumulative star formation history, star formation rates, and mean metallicity evolution as functions of logAge = log10(age [yr]).\n\nArguments\n\ncoeffs::AbstractVector is a vector of stellar mass coefficients such as those returned by fit_templates, for example. Actual stellar mass in stellar population j is coeffs[j] * normalize_value.\nlogAge::AbstractVector is a vector giving the log10(age [yr]) of the stellar populations corresponding to the provided coeffs. For the purposes of calculating star formation rates, these are assumed to be left-bin edges.\nMH::AbstractVector is a vector giving the metallicities of the stellar populations corresponding to the provided coeffs.\nT_max::Number is the rightmost final bin edge for calculating star formation rates. For example, you might have logAge=[6.6, 6.7, 6.8] in which case a final logAge of 6.9 would give equal bin widths. In this case you would set T_max = exp10(6.9) / 1e9 ≈ 0.0079 so that the width of the final bin for the star formation rate calculation has the same log10(Age [yr]) step as the other bins.\n\nKeyword Arguments\n\nnormalize_value is a multiplicative prefactor to apply to all the coeffs; same as the keyword in partial_cmd_smooth.\nsorted::Bool is either true or false and signifies whether to assume logAge is sorted.\n\nReturns\n\nunique_logAge::Vector is essentially unique(sort(logAge)) and provides the x-values you would plot the other returned vectors against.\ncum_sfh::Vector is the normalized cumulative SFH implied by the provided coeffs. This is ~1 at the most recent time in logAge and decreases as logAge increases.\nsfr::Vector gives the star formation rate across each bin in unique_logAge. If coeffs .* normalize_value are in units of solar masses, then sfr is in units of solar masses per year.\nmean_MH::Vector gives the stellar-mass-weighted mean metallicity of the stellar population as a function of unique_logAge. \n\n\n\n\n\n","category":"function"},{"location":"examples/#examples","page":"Examples","title":"Examples","text":"","category":"section"},{"location":"examples/","page":"Examples","title":"Examples","text":"We have constructed an example Jupyter notebook that highlights some common use cases supported by the package. It is recommended that you read some of the background in our main documentation before or concurrently with the example. The notebook is available in the repository as examples/fitting1.ipynb and can be viewed in rendered form at this link. It relies on a custom isochrone file which can be made available upon request to the package author. ","category":"page"},{"location":"#overview","page":"Overview","title":"Overview","text":"","category":"section"},{"location":"","page":"Overview","title":"Overview","text":"This package enables many different kinds of analysis related to astrophysical star formation histories (SFHs). Core among these functionalities are generation of mock color-magnitude diagrams (CMDs) from input SFHs and fitting of SFHs from observed CMDs. The methods of this package have been designed to be simple to use but easy to extend. It is recommended that you use this package in conjunction with InitialMassFunctions.jl which provides implementations of the most popular stellar initial mass functions as new types which are natively supported by this package's methods.","category":"page"}] -} diff --git a/previews/PR33/simulate/index.html b/previews/PR33/simulate/index.html deleted file mode 100644 index dcdc375..0000000 --- a/previews/PR33/simulate/index.html +++ /dev/null @@ -1,9 +0,0 @@ - -Simulating Color-Magnitude Diagrams · StarFormationHistories.jl

    Simulating Color-Magnitude Diagrams

    Modelling observations of resolved stellar populations (e.g., color-magnitude or Hess diagrams) with user-defined star formation histories can be useful for comparison to actual observations, but also enables a number of other scientific activities (e.g., making predictions to motivate observational proposals). To support these uses we offer methods for sampling stellar populations from isochrones using user-defined star formation histories, initial mass functions, and stellar binary models. These methods require data from user-provided isochrones (this package does not provide any), an initial mass function model (such as those provided in InitialMassFunctions.jl), and a model specifying how (or if) to sample binary or multi-star systems.

    The simplest methods only sample stars from a single stellar population. We provide a method that samples up to a provided stellar mass, generate_stars_mass (e.g., $10^7 \, \text{M}_\odot$) and a method that samples up to a provided absolute magnitude generate_stars_mag (e.g., $M_V=-10$). These are documented under the first subsection below. These methods are single-threaded.

    We also offer methods for sampling populations with complex star formation histories; these are implicitly multi-threaded across the separate populations if you start Julia with multiple threads (e.g., with julia -t 4 or similar). We provide generate_stars_mass_composite for sampling such populations up to a provided stellar mass and generate_stars_mag_composite for sampling such populations up to a provided absolute magnitude. These are documented under the second subsection below.

    Simple Stellar Populations

    StarFormationHistories.generate_stars_massFunction
    (sampled_masses, sampled_mags) = generate_stars_mass(mini_vec::AbstractVector{<:Number}, mags, mag_names::AbstractVector{String}, limit::Number, imf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous}; dist_mod::Number=0, rng::Random.AbstractRNG=Random.default_rng(), mag_lim::Number=Inf, mag_lim_name::String="V", binary_model::StarFormationHistories.AbstractBinaryModel=StarFormationHistories.RandomBinaryPairs(0.3))

    Generates a random sample of stars from an isochrone defined by the provided initial stellar masses mini_vec, absolute magnitudes mags, and filter names mag_names with total population birth stellar mass limit (e.g., 1e5 solar masses). Initial stellar masses are sampled from the provided imf.

    Arguments

    • mini_vec::AbstractVector{<:Number} contains the initial masses (in solar masses) for the stars in the isochrone; must be mutable as we call Interpolations.deduplicate_knots!(mini_vec).
    • mags contains the absolute magnitudes from the isochrone in the desired filters corresponding to the same stars as provided in mini_vec. mags is internally interpreted and converted into a standard format by StarFormationHistories.ingest_mags. Valid inputs are:
      • mags::AbstractVector{AbstractVector{<:Number}}, in which case the length of the outer vector length(mags) can either be equal to length(mini_vec), in which case the length of the inner vectors must all be equal to the number of filters you are providing, or the length of the outer vector can be equal to the number of filters you are providing, and the length of the inner vectors must all be equal to length(mini_vec); this is the more common use-case.
      • mags::AbstractMatrix{<:Number}, in which case mags must be 2-dimensional. Valid shapes are size(mags) == (length(mini_vec), nfilters) or size(mags) == (nfilters, length(mini_vec)), with nfilters being the number of filters you are providing.
    • mag_names::AbstractVector{String} contains strings describing the filters you are providing in mags; an example might be ["B","V"]. These are used when mag_lim is finite to determine what filter you want to use to limit the faintest stars you want returned.
    • limit::Number gives the total birth stellar mass of the population you want to sample. See the "Notes" section on population masses for more information.
    • imf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous} is a sampleable continuous univariate distribution implementing a stellar initial mass function with a defined rand(rng::Random.AbstractRNG, imf) method to use for sampling masses. All instances of Distributions.ContinuousUnivariateDistribution are also valid. Implementations of commonly used IMFs are available in InitialMassFunctions.jl.

    Keyword Arguments

    • dist_mod::Number=0 is the distance modulus (see StarFormationHistories.distance_modulus) you wish to have added to the returned magnitudes to simulate a population at a particular distance.
    • rng::Random.AbstractRNG=Random.default_rng() is the rng instance that will be used to sample the stellar initial masses from imf.
    • mag_lim::Number=Inf gives the faintest apparent magnitude for stars you want to be returned in the output. Stars fainter than this magnitude will still be sampled and contribute properly to the total mass of the population, but they will not be returned.
    • mag_lim_name::String="V" gives the filter name (as contained in mag_names) to use when considering if a star is fainter than mag_lim. This is unused if mag_lim is infinite.
    • binary_model::StarFormationHistories.AbstractBinaryModel=StarFormationHistories.RandomBinaryPairs(0.3) is an instance of a model for treating binaries; currently provided options are NoBinaries, RandomBinaryPairs, and BinaryMassRatio.

    Returns

    • sampled_masses::Vector{SVector{N,eltype(imf)}}: a vector containing the initial stellar masses of the stars sampled by sample_system; see that method's documentation for details on format. In short, each StaticArrays.SVector represents one stellar system and each entry in each StaticArrays.SVector is one star in that system. Entries will be 0 when companions could have been sampled but were not (i.e., when using a binary_model that supports multi-star systems).
    • sampled_mags::Vector{SVector{N,<:Number}}: a vector containing StaticArrays.SVectors with the multi-band magnitudes of the sampled stars. To get the magnitude of star i in band j, you index as sampled_mags[i][j]. This can be reinterpreted as a 2-dimensional Matrix with reduce(hcat,sampled_mags).

    Notes

    Population Masses

    Given a particular isochrone with an initial mass vector mini_vec, it will never cover the full range of stellar birth masses because stars that die before present-day are not included in the isochrone. However, these stars were born, and so contribute to the total birth mass of the system. There are two ways to properly account for this lost mass when sampling:

    1. Set the upper limit for masses that can be sampled from the imf distribution to a physical value for the maximum birth mass of stars (e.g., 100 solar masses). In this case, these stars will be sampled from imf, and will contribute their masses to the system, but they will not be returned if their birth mass is greater than maximum(mini_vec). This is typically easiest for the user and only results in ∼15% loss of efficiency for 10 Gyr isochrones.
    2. Set the upper limit for masses that can be sampled from the imf distribution to maximum(mini_vec) and adjust limit to respect the amount of initial stellar mass lost by not sampling higher mass stars. This can be calculated as new_limit = limit * ( QuadGK.quadgk(x->x*pdf(imf,x), minimum(mini_vec), maximum(mini_vec))[1] / QuadGK.quadgk(x->x*pdf(imf,x), minimum(imf), maximum(imf))[1] ), with the multiplicative factor being the fraction of the population stellar mass contained in stars with initial masses between minimum(mini_vec) and maximum(mini_vec); this factor is the ratio

    \[\frac{\int_a^b \ m \times \frac{dN(m)}{dm} \ dm}{\int_0^∞ \ m \times \frac{dN(m)}{dm} \ dm}\]

    source
    StarFormationHistories.generate_stars_magFunction
    (sampled_masses, sampled_mags) =  generate_stars_mag(mini_vec::AbstractVector{<:Number}, mags, mag_names::AbstractVector{String}, absmag::Real, absmag_name::String, imf::Distributions.Sampleable{Distributions.Univariate,Distributions.Continuous}; dist_mod::Number=0, rng::AbstractRNG=default_rng(), mag_lim::Number=Inf, mag_lim_name::String="V", binary_model::StarFormationHistories.AbstractBinaryModel=RandomBinaryPairs(0.3))

    Generates a mock stellar population from an isochrone defined by the provided initial stellar masses mini_vec, absolute magnitudes mags, and filter names mag_names. The population is sampled to a total absolute magnitude absmag::Real (e.g., -7 or -12) in the filter absmag_name::String (e.g., "V" or "F606W") which is contained in the provided mag_names::AbstractVector{String}. Other arguments are shared with generate_stars_mass, which contains the main documentation.

    Notes

    Population Magnitudes

    Unlike when sampling a population to a fixed initial birth mass, as is implemented in generate_stars_mass, when generating a population up to a fixed absolute magnitude, only stars that survive to present-day contribute to the flux of the population. If you choose to limit the apparent magnitude of stars returned by passing the mag_lim and mag_lim_name keyword arguments, stars fainter than your chosen limit will still be sampled and will still contribute their luminosity to the total population, but they will not be contained in the returned output.

    source

    Complex Stellar Populations

    StarFormationHistories.generate_stars_mass_compositeFunction
    (sampled_masses, sampled_mags) = generate_stars_mass_composite(mini_vec::AbstractVector{<:AbstractVector{<:Number}}, mags::AbstractVector, mag_names::AbstractVector{String}, limit::Number, massfrac::AbstractVector{<:Number}, imf::Sampleable{Univariate,Continuous}; kws...)

    Generates a random sample of stars with a complex star formation history using multiple isochrones. Very similar to generate_stars_mass except the isochrone-related arguments mini_vec and mags should now be vectors of vectors containing the relevant data for the full set of isochrones to be considered. The total birth stellar mass of the sampled population is given by limit. The proportion of this mass allotted to each of the individual isochrones is given by the entries of the massfrac vector. This basically just proportions limit according to massfrac and calls generate_stars_mass for each of the individual stellar populations; as such it is set up to multi-thread across the multiple stellar populations.

    Arguments

    • mini_vec::AbstractVector{<:AbstractVector{<:Number}} contains the initial masses (in solar masses) for the stars in each isochrone; the internal vectors must be mutable as we will call Interpolations.deduplicate_knots! on each. The length of mini_vec should be equal to the number of isochrones.
    • mags contains the absolute magnitudes from the isochrones in the desired filters corresponding to the same stars as provided in mini_vec. The length of mags should be equal to the number of isochrones. The individual elements of mags are each internally interpreted and converted into a standard format by StarFormationHistories.ingest_mags. The valid formats for the individual elements of mags are:
      • AbstractVector{AbstractVector{<:Number}}, in which case the length of the vector length(mags[i]) can either be equal to length(mini_vec[i]), in which case the length of the inner vectors must all be equal to the number of filters you are providing, or the length of the outer vector can be equal to the number of filters you are providing, and the length of the inner vectors must all be equal to length(mini_vec[i]); this is the more common use-case.
      • AbstractMatrix{<:Number}, in which case mags[i] must be 2-dimensional. Valid shapes are size(mags[i]) == (length(mini_vec[i]), nfilters) or size(mags[i]) == (nfilters, length(mini_vec[i])), with nfilters being the number of filters you are providing.
    • mag_names::AbstractVector{String} contains strings describing the filters you are providing in mags; an example might be ["B","V"]. These are used when mag_lim is finite to determine what filter you want to use to limit the faintest stars you want returned. These are assumed to be the same for all isochrones.
    • limit::Number gives the total birth stellar mass of the population you want to sample.
    • massfrac::AbstractVector{<:Number} is vector giving the relative fraction of mass allotted to each individual stellar population; length must be equal to the length of mini_vec and mags.
    • imf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous} is a sampleable continuous univariate distribution implementing a stellar initial mass function with a defined rand(rng::Random.AbstractRNG, imf) method to use for sampling masses. All instances of Distributions.ContinuousUnivariateDistribution are also valid. Implementations of commonly used IMFs are available in InitialMassFunctions.jl.

    Keyword Arguments

    All keyword arguments kws... are passed to generate_stars_mass; you should refer to that method's documentation for more information.

    Returns

    • sampled_masses::Vector{Vector{SVector{N,eltype(imf)}}} is a vector of vectors containing the initial stellar masses of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e., all of sampled_masses[1] were sampled from mini_vec[1] and so on. These can be concatenated into a single vector with reduce(vcat,sampled_masses). The format of the contained StaticArrays.SVectors are as output from sample_system; see that method's documentation for more details.
    • sampled_mags::Vector{Vector{SVector{N,<:Number}}} is a vector of vectors containing StaticArrays.SVectors with the multi-band magnitudes of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e. all of sampled_mags[1] were sampled from mags[1] and so on. To get the magnitude of star i in band j sampled from isochrone k, you would do sampled_mags[k][i][j]. This can be concatenated into a Vector{SVector} with reduce(vcat,sampled_mags) and a 2-D Matrix with reduce(hcat,reduce(vcat,sampled_mags)).
    source
    StarFormationHistories.generate_stars_mag_compositeFunction
    (sampled_masses, sampled_mags) = generate_stars_mag_composite(mini_vec::AbstractVector{<:AbstractVector{<:Number}}, mags::AbstractVector, mag_names::AbstractVector{String}, absmag::Number, absmag_name::String, fracs::AbstractVector{<:Number}, imf::Sampleable{Univariate,Continuous}; frac_type::String="lum", kws...)

    Generates a random sample of stars with a complex star formation history using multiple isochrones. Very similar to generate_stars_mag except the isochrone-related arguments mini_vec and mags should now be vectors of vectors containing the relevant data for the full set of isochrones to be considered. The total absolute magnitude of the sampled population is given by absmag. The proportion of the luminosity allotted to each of the individual isochrones is given by the entries of the frac vector. This basically just proportions the luminosity according to frac and calls generate_stars_mag for each of the individual stellar populations; as such it is set up to multi-thread across the multiple stellar populations.

    Arguments

    • mini_vec::AbstractVector{<:AbstractVector{<:Number}} contains the initial masses (in solar masses) for the stars in each isochrone; the internal vectors must be mutable as we will call Interpolations.deduplicate_knots! on each. The length of mini_vec should be equal to the number of isochrones.
    • mags contains the absolute magnitudes from the isochrones in the desired filters corresponding to the same stars as provided in mini_vec. The length of mags should be equal to the number of isochrones. The individual elements of mags are each internally interpreted and converted into a standard format by StarFormationHistories.ingest_mags. The valid formats for the individual elements of mags are:
      • AbstractVector{AbstractVector{<:Number}}, in which case the length of the vector length(mags[i]) can either be equal to length(mini_vec[i]), in which case the length of the inner vectors must all be equal to the number of filters you are providing, or the length of the outer vector can be equal to the number of filters you are providing, and the length of the inner vectors must all be equal to length(mini_vec[i]); this is the more common use-case.
      • AbstractMatrix{<:Number}, in which case mags[i] must be 2-dimensional. Valid shapes are size(mags[i]) == (length(mini_vec[i]), nfilters) or size(mags[i]) == (nfilters, length(mini_vec[i])), with nfilters being the number of filters you are providing.
    • mag_names::AbstractVector{String} contains strings describing the filters you are providing in mags; an example might be ["B","V"]. These are used when mag_lim is finite to determine what filter you want to use to limit the faintest stars you want returned. These are assumed to be the same for all isochrones.
    • absmag::Number gives the total absolute magnitude of the complex population to be sampled.
    • fracs::AbstractVector{<:Number} is a vector giving the relative fraction of luminosity or mass (determined by the frac_type keyword argument) allotted to each individual stellar population; length must be equal to the length of mini_vec and mags.
    • imf::Distributions.Sampleable{Distributions.Univariate, Distributions.Continuous} is a sampleable continuous univariate distribution implementing a stellar initial mass function with a defined rand(rng::Random.AbstractRNG, imf) method to use for sampling masses. All instances of Distributions.ContinuousUnivariateDistribution are also valid. Implementations of commonly used IMFs are available in InitialMassFunctions.jl.

    Keyword Arguments

    • frac_type::String either "lum", in which case fracs is assumed to contain the relative luminosity fractions for each individual isochrone, or "mass", in which case it is assumed that fracs contains mass fractions ("mass" is not yet implemented).

    All other keyword arguments kws... are passed to generate_stars_mag; you should refer to that method's documentation for more information.

    Returns

    • sampled_masses::Vector{Vector{SVector{N,eltype(imf)}}} is a vector of vectors containing the initial stellar masses of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e., all of sampled_masses[1] were sampled from mini_vec[1] and so on. These can be concatenated into a single vector with reduce(vcat,sampled_masses). The format of the contained StaticArrays.SVectors are as output from sample_system; see that method's documentation for more details.
    • sampled_mags::Vector{Vector{SVector{N,<:Number}}} is a vector of vectors containing StaticArrays.SVectors with the multi-band magnitudes of the sampled stars. The outer vectors are separated by the isochrone the stars were generated from; i.e. all of sampled_mags[1] were sampled from mags[1] and so on. To get the magnitude of star i in band j sampled from isochrone k, you would do sampled_mags[k][i][j]. This can be concatenated into a Vector{SVector} with reduce(vcat,sampled_mags) and a 2-D Matrix with reduce(hcat,reduce(vcat,sampled_mags)).
    source

    Observational Effects

    The output produced from the above methods are clean in the sense that they do not include any observational effects like photometric error or incompleteness. These effects should be implemented in a post-processing step. We provide a simple method model_cmd that accepts user-defined photometric error and completeness functions and applies them to the initial catalog, returning a Monte Carlo realization of a possible observed catalog. This method assumes Gaussian photometric errors and that the photometric error and completeness functions are separable by filter – these assumptions are not applicable for all types of data, but the source code for the method is exceedingly simple (~20 lines) and should provide an example for how you could write a similar method that more accurately reflects your data.

    StarFormationHistories.model_cmdFunction
    new_mags = model_cmd(mags::AbstractVector{<:AbstractVector{<:Number}}, errfuncs, completefuncs; rng::Random.AbstractRNG=Random.default_rng())

    Simple method for modelling photometric error and incompleteness to "mock observe" a pure catalog of stellar photometry, such as those produced by generate_stars_mass and generate_stars_mag. This method assumes Gaussian photometric errors and that the photometric error and completeness functions are separable by filter.

    Arguments

    • mags::AbstractVector{<:AbstractVector{<:Number}}: a vector of vectors giving the magnitudes of each star to be modelled. The first index is the per-star index and the second index is the per-filter index (so mags[10][2] would give the magnitude of the tenth star in the second filter). This is the same format as the magnitudes returned by generate_stars_mass and generate_stars_mag; to use output from the composite versions, you must first reduce(vcat,mags) before passing to this function.
    • errfuncs: an iterable (typically a vector or tuple) of callables (typically functions or interpolators) with length equal to the number of filters contained in the elements of mags. This iterable must contain callables that, when called with the associated magnitudes from mags, will return the expected 1-σ photometric error at that magnitude. The organization is such that the photometric error for star i in band j is σ_ij = errfuncs[j](mags[i][j]).
    • completefuncs: an iterable (typically a vector or tuple) of callables (typically functions or interpolators) with length equal to the number of filters contained in the elements of mags. This iterable must contain callables that, when called with the associated magnitudes from mags, will return the probability that a star with that magnitude in that band will be found in your color-magnitude diagram (this should include the original detection probability and any post-detection quality, morphology, or other cuts). The organization is such that the detection probability for star i in band j is c_ij = completefuncs[j](mags[i][j]).

    Keyword Arguments

    • rng::AbstractRNG=Random.default_rng(): The object to use for random number generation.

    Returns

    • new_mags: an object similar to mags (i.e., a Vector{Vector{<:Number}}, Vector{SVector{N,<:Number}}, etc.) containing the magnitudes of the mock-observed stars. This will be shorter than the provided mags vector as we are modelling photometric incompleteness, and the magnitudes will also have random photometric errors added to them. This can be reinterpreted as a 2-dimensional Matrix with reduce(hcat,new_mags).

    Notes

    • This is a simple implementation that seeks to show a simple example of how one can post-process catalogs of "pure" stars from methods like generate_stars_mass and generate_stars_mag to include observational effects. This method assumes Gaussian photometric errors, which may not, in general, be accurate. It also assumes that the total detection probability can be modelled as the product of the single-filter detection probabilities as computed by completefuncs (i.e., that the completeness functions are separable across filters). This can be a reasonable assumption when you have separate photometric catalogs derived for each filter and you only collate them afterwards, but it is generally not a good assumption for detection algorithms that operate on simultaneously on multi-band photometry – the completeness functions for these types of algorithms are generally not separable.
    source

    Developer Internals

    StarFormationHistories.ingest_magsFunction
    new_mags = ingest_mags(mini_vec::AbstractVector, mags::AbstractVector{T}) where {S <: Number, T <: AbstractVector{S}}
    -new_mags = ingest_mags(mini_vec::AbstractVector, mags::AbstractMatrix{S}) where S <: Number

    Reinterprets provided mags to be in the correct format for input to Interpolations.interpolate.

    Returns

    • new_mags::Base.ReinterpretArray{StaticArrays.SVector}: a length(mini_vec) vector of StaticArrays.SVectors containing the same data as mags but formatted for input to Interpolations.interpolate.
    source
    StarFormationHistories.sort_ingestedFunction
    (new_mini_vec, new_mags) = sort_ingested(mini_vec::AbstractVector, mags::AbstractVector)

    Takes mini_vec and mags and ensures that mini_vec is sorted (sometimes in PARSEC isochrones they are not) and calls Interpolations.deduplicate_knots! on mini_vec to ensure there are no repeat entries. Arguments must satisfy length(mini_vec) == length(mags).

    source
    StarFormationHistories.mass_limitsFunction
    (mmin, mmax) = mass_limits(mini_vec::AbstractVector{<:Number}, mags::AbstractVector{T},
    -                 mag_names::AbstractVector{String}, mag_lim::Number,
    -                 mag_lim_name::String) where T <: AbstractVector{<:Number}

    Calculates initial mass limits that reflect a given faint-end magnitude limit.

    Arguments

    • mini_vec::AbstractVector{<:Number}: a length nstars vector containing initial stellar masses.
    • mags::AbstractVector{<:AbstractVector{<:Number}}: a length nstars vector, with each element being a length nfilters vector giving the magnitudes of each star in the filters mag_names.
    • mag_names::AbstractVector{String}: a vector giving the names of each filter as strings.
    • mag_lim::Number: the faint-end magnitude limit you wish to use.
    • mag_lim_name::String: the name of the filter in which mag_lim is to be applied. Must be contained in mag_names.

    Returns

    • mmin::eltype(mini_vec): the initial mass corresponding to your requested mag_lim in the filter mag_lim_name. If all stars provided are brighter than your requested mag_lim, then this will be equal to minimum(mini_vec).
    • mmax::eltype(mini_vec): the maximum valid mass in mini_vec; simply maximum(mini_vec).

    Examples

    julia> mass_limits([0.05,0.1,0.2,0.3], [[4.0],[3.0],[2.0],[1.0]], ["F090W"], 2.5, "F090W")
    -(0.15, 0.3)
    -
    -julia> mass_limits([0.05,0.1,0.2,0.3], [[4.0,3.0],[3.0,2.0],[2.0,1.0],[1.0,0.0]], ["F090W","F150W"], 2.5, "F090W")
    -(0.15, 0.3)
    source
    diff --git a/previews/PR33/siteinfo.js b/previews/PR33/siteinfo.js deleted file mode 100644 index b14164d..0000000 --- a/previews/PR33/siteinfo.js +++ /dev/null @@ -1 +0,0 @@ -var DOCUMENTER_CURRENT_VERSION = "previews/PR33";