diff --git a/stable b/stable index 4ea5caf..349ca0e 120000 --- a/stable +++ b/stable @@ -1 +1 @@ -v0.8.0 \ No newline at end of file +v0.8.1 \ No newline at end of file diff --git a/v0.8 b/v0.8 index 4ea5caf..349ca0e 120000 --- a/v0.8 +++ b/v0.8 @@ -1 +1 @@ -v0.8.0 \ No newline at end of file +v0.8.1 \ No newline at end of file diff --git a/v0.8.1/.documenter-siteinfo.json b/v0.8.1/.documenter-siteinfo.json new file mode 100644 index 0000000..256bc80 --- /dev/null +++ b/v0.8.1/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-24T17:05:55","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/v0.8.1/api/index.html b/v0.8.1/api/index.html new file mode 100644 index 0000000..77e393e --- /dev/null +++ b/v0.8.1/api/index.html @@ -0,0 +1,6 @@ + +API Reference · ExplainableAI.jl

Basic API

All methods in ExplainableAI.jl work by calling analyze on an input and an analyzer:

XAIBase.analyzeFunction
analyze(input, method)
+analyze(input, method, output_selection)

Apply the analyzer method for the given input, returning an Explanation. If output_selection is specified, the explanation will be calculated for that output. Otherwise, the output with the highest activation is automatically chosen.

See also Explanation.

Keyword arguments

  • add_batch_dim: add batch dimension to the input without allocating. Default is false.
source
XAIBase.ExplanationType
Explanation(val, output, output_selection, analyzer, heatmap, extras)

Return type of analyzers when calling analyze.

Fields

  • val: numerical output of the analyzer, e.g. an attribution or gradient
  • output: model output for the given analyzer input
  • output_selection: index of the output used for the explanation
  • analyzer: symbol corresponding the used analyzer, e.g. :Gradient or :LRP
  • heatmap: symbol indicating a preset heatmapping style, e.g. :attribution, :sensitivity or :cam
  • extras: optional named tuple that can be used by analyzers to return additional information.
source

For heatmapping functionality, take a look at either VisionHeatmaps.jl or TextHeatmaps.jl. Both provide heatmap methods for visualizing explanations, either for images or text, respectively.

Analyzers

ExplainableAI.GradientType
Gradient(model)

Analyze model by calculating the gradient of a neuron activation with respect to the input.

source
ExplainableAI.InputTimesGradientType
InputTimesGradient(model)

Analyze model by calculating the gradient of a neuron activation with respect to the input. This gradient is then multiplied element-wise with the input.

source
ExplainableAI.SmoothGradFunction
SmoothGrad(analyzer, [n=50, std=0.1, rng=GLOBAL_RNG])
+SmoothGrad(analyzer, [n=50, distribution=Normal(0, σ²=0.01), rng=GLOBAL_RNG])

Analyze model by calculating a smoothed sensitivity map. This is done by averaging sensitivity maps of a Gradient analyzer over random samples in a neighborhood of the input, typically by adding Gaussian noise with mean 0.

References

  • Smilkov et al., SmoothGrad: removing noise by adding noise
source
ExplainableAI.IntegratedGradientsFunction
IntegratedGradients(analyzer, [n=50])
+IntegratedGradients(analyzer, [n=50])

Analyze model by using the Integrated Gradients method.

References

  • Sundararajan et al., Axiomatic Attribution for Deep Networks
source
ExplainableAI.GradCAMType
GradCAM(feature_layers, adaptation_layers)

Calculates the Gradient-weighted Class Activation Map (GradCAM). GradCAM provides a visual explanation of the regions with significant neuron importance for the model's classification decision.

Parameters

  • feature_layers: The layers of a convolutional neural network (CNN) responsible for extracting feature maps.
  • adaptation_layers: The layers of the CNN used for adaptation and classification.

Note

Flux is not required for GradCAM. GradCAM is compatible with a wide variety of CNN model-families.

References

  • Selvaraju et al., Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
source

Input augmentations

SmoothGrad and IntegratedGradients are special cases of the input augmentations NoiseAugmentation and InterpolationAugmentation, which can be applied as a wrapper to any analyzer:

ExplainableAI.NoiseAugmentationType
NoiseAugmentation(analyzer, n, [std=1, rng=GLOBAL_RNG])
+NoiseAugmentation(analyzer, n, distribution, [rng=GLOBAL_RNG])

A wrapper around analyzers that augments the input with n samples of additive noise sampled from distribution. This input augmentation is then averaged to return an Explanation.

source
ExplainableAI.InterpolationAugmentationType
InterpolationAugmentation(model, [n=50])

A wrapper around analyzers that augments the input with n steps of linear interpolation between the input and a reference input (typically zero(input)). The gradients w.r.t. this augmented input are then averaged and multiplied with the difference between the input and the reference input.

source

Index

diff --git a/v0.8.1/assets/documenter.js b/v0.8.1/assets/documenter.js new file mode 100644 index 0000000..c6562b5 --- /dev/null +++ b/v0.8.1/assets/documenter.js @@ -0,0 +1,1050 @@ +// 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/v0.8.1/assets/logo.png b/v0.8.1/assets/logo.png new file mode 100644 index 0000000..54bb485 Binary files /dev/null and b/v0.8.1/assets/logo.png differ diff --git a/v0.8.1/assets/themes/documenter-dark.css b/v0.8.1/assets/themes/documenter-dark.css new file mode 100644 index 0000000..1d71701 --- /dev/null +++ b/v0.8.1/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;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/v0.8.1/assets/themes/documenter-light.css b/v0.8.1/assets/themes/documenter-light.css new file mode 100644 index 0000000..07f9d08 --- /dev/null +++ b/v0.8.1/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;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/v0.8.1/assets/themeswap.js b/v0.8.1/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.8.1/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.8.1/assets/warner.js b/v0.8.1/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.8.1/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.8.1/generated/augmentations.ipynb b/v0.8.1/generated/augmentations.ipynb new file mode 100644 index 0000000..6253ee6 --- /dev/null +++ b/v0.8.1/generated/augmentations.ipynb @@ -0,0 +1,373 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Analyzer augmentations\n", + "All analyzers implemented in ExplainableAI.jl can be augmented by two types of augmentations:\n", + "`NoiseAugmentation`s and `InterpolationAugmentation`s.\n", + "These augmentations are wrappers around analyzers\n", + "that modify the input before passing it to the analyzer.\n", + "\n", + "We build on the basics shown in the *Getting started* section\n", + "and start out by loading the same pre-trained LeNet5 model and MNIST input data:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Chain(\n Conv((5, 5), 1 => 6, relu), \u001b[90m# 156 parameters\u001b[39m\n MaxPool((2, 2)),\n Conv((5, 5), 6 => 16, relu), \u001b[90m# 2_416 parameters\u001b[39m\n MaxPool((2, 2)),\n Flux.flatten,\n Dense(256 => 120, relu), \u001b[90m# 30_840 parameters\u001b[39m\n Dense(120 => 84, relu), \u001b[90m# 10_164 parameters\u001b[39m\n Dense(84 => 10), \u001b[90m# 850 parameters\u001b[39m\n) \u001b[90m # Total: 10 arrays, \u001b[39m44_426 parameters, 174.867 KiB." + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using ExplainableAI\n", + "using VisionHeatmaps\n", + "using Flux\n", + "\n", + "using BSON # hide\n", + "model = BSON.load(\"../model.bson\", @__MODULE__)[:model] # hide\n", + "model" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 reinterpret(reshape, ColorTypes.Gray{Float32}, ::Matrix{Float32}) with eltype ColorTypes.Gray{Float32}:\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n ⋮ ⋱ \n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAAAAADji6uXAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAjhJREFUaAW9wb2L1gUAB/DPcd+oQaPswCGqpSGHXqYTapGgJSg4CeoPcEiECqFDpCGwTdIQImuIsGiTtmjJgl6GoKEiIhqCoMQsOOhFy85r+A3H8fTo73mM7+cTZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWc7gTS1jBHlzGSXyK71xZlEVZlMUM7sYB7MWSrXbjH3yLj/E0/jYpyqIsymKEe3AAj+NGgx/xEb7HKj7HMnbgYXyBkyZFWZRFWVzFq1jBksH7+AqHcdHgfuzH67gP5/AyTuO8raIsyqIsprgBq9iHBZzHKziKP2x1CxbxPN7DHaaLsiiLsphiD57FAn7CXnxmq0XchlN4FzcbLOBNrJkUZVEWZTHFItYNLmE3HsNdBhewC7vwC3badA4v4JJJURZlURZTnMEHeAi34wQ2DNaxaNNOg8t4B0/hrP8WZVEWZTHFBazgJhzCA/gVP+B63ItlW72Gw1gzXZRFWZTFVazhkEmnsGzwGw7iDay7siiLsiiLOaziCZv2423jRFmURVnMaB+eQwy+xmnjRVmURVnMYBkvYpvB73gSfxkvyqIsymIGj2C7wZ94FJ+YTZRFWZTFSNuxatNb+NDsoizKoixG2IZvcJ3Bl3jGfKIsyqIsRngQt2LD4CAumk+URVmUxQhHsGFwFGfML8qiLMpihB1YwM94ybWJsiiLshjhGI7hCM66NlEWZVEWIxzHcf+PKIuyKPsXNwdYfgiRxs8AAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "using MLDatasets\n", + "using ImageCore, ImageIO, ImageShow\n", + "\n", + "index = 10\n", + "x, y = MNIST(Float32, :test)[10]\n", + "input = reshape(x, 28, 28, 1, :)\n", + "\n", + "convert2image(MNIST, x)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "## Noise augmentation\n", + "The `NoiseAugmentation` wrapper computes explanations averaged over noisy inputs.\n", + "Let's demonstrate this on the `Gradient` analyzer.\n", + "First, we compute the heatmap of an explanation without augmentation:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.461087,0.459224,0.457032) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.468989,0.467139,0.464901) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.479787,0.477956,0.475654) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.459915,0.45805,0.455864) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.445069,0.443181,0.441081) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.445034,0.443146,0.441047) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.457174,0.455305,0.453135) RGB{Float64}(0.463812,0.461953,0.459745)\n RGB{Float64}(0.466269,0.464414,0.462192) RGB{Float64}(0.463755,0.461896,0.459688)\n RGB{Float64}(0.470723,0.468876,0.466628) RGB{Float64}(0.452716,0.45084,0.448697)\n RGB{Float64}(0.485669,0.483847,0.481511) RGB{Float64}(0.450914,0.449035,0.446902)\n ⋮ ⋱ \n RGB{Float64}(0.46542,0.463564,0.461346) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.481108,0.479278,0.476969) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.456239,0.454368,0.452204) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.443836,0.441947,0.439855) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.435607,0.433706,0.431661) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.452624,0.450747,0.448604) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.451326,0.449448,0.447312) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.467146,0.465293,0.463065) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.464131,0.462273,0.460063) RGB{Float64}(0.464131,0.462273,0.460063)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "analyzer = Gradient(model)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Now we wrap the analyzer in a `NoiseAugmentation` with 10 samples of noise.\n", + "By default, the noise is sampled from a Gaussian distribution\n", + "with mean 0 and standard deviation 1." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.448439,0.446556,0.444437) … RGB{Float64}(0.45011,0.44823,0.446102)\n RGB{Float64}(0.450416,0.448536,0.446406) RGB{Float64}(0.450035,0.448155,0.446027)\n RGB{Float64}(0.454668,0.452795,0.45064) RGB{Float64}(0.44808,0.446197,0.44408)\n RGB{Float64}(0.447673,0.44579,0.443675) RGB{Float64}(0.447804,0.445921,0.443805)\n RGB{Float64}(0.439141,0.437245,0.43518) RGB{Float64}(0.452162,0.450286,0.448145)\n RGB{Float64}(0.436617,0.434718,0.432667) … RGB{Float64}(0.453304,0.451428,0.449281)\n RGB{Float64}(0.442315,0.440424,0.43834) RGB{Float64}(0.454358,0.452484,0.450331)\n RGB{Float64}(0.446499,0.444614,0.442506) RGB{Float64}(0.446073,0.444187,0.442082)\n RGB{Float64}(0.445808,0.443922,0.441818) RGB{Float64}(0.440099,0.438205,0.436134)\n RGB{Float64}(0.45176,0.449882,0.447744) RGB{Float64}(0.440371,0.438476,0.436404)\n ⋮ ⋱ \n RGB{Float64}(0.447601,0.445717,0.443603) RGB{Float64}(0.454162,0.452288,0.450136)\n RGB{Float64}(0.453985,0.452111,0.44996) … RGB{Float64}(0.447594,0.44571,0.443596)\n RGB{Float64}(0.451135,0.449257,0.447122) RGB{Float64}(0.446818,0.444934,0.442824)\n RGB{Float64}(0.445032,0.443144,0.441045) RGB{Float64}(0.447403,0.445519,0.443405)\n RGB{Float64}(0.443146,0.441256,0.439167) RGB{Float64}(0.450957,0.449078,0.446944)\n RGB{Float64}(0.445533,0.443646,0.441543) RGB{Float64}(0.454958,0.453085,0.450929)\n RGB{Float64}(0.446702,0.444816,0.442707) … RGB{Float64}(0.452736,0.45086,0.448716)\n RGB{Float64}(0.448384,0.446501,0.444383) RGB{Float64}(0.449308,0.447427,0.445303)\n RGB{Float64}(0.450467,0.448587,0.446456) RGB{Float64}(0.449723,0.447842,0.445716)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "analyzer = NoiseAugmentation(Gradient(model), 50)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Note that a higher sample size is desired, as it will lead to a smoother heatmap.\n", + "However, this comes at the cost of a longer computation time.\n", + "\n", + "We can also set the standard deviation of the Gaussian distribution:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.449978,0.448098,0.44597) … RGB{Float64}(0.452173,0.450296,0.448156)\n RGB{Float64}(0.452705,0.450829,0.448685) RGB{Float64}(0.45192,0.450043,0.447904)\n RGB{Float64}(0.456123,0.454252,0.452088) RGB{Float64}(0.450424,0.448544,0.446414)\n RGB{Float64}(0.45265,0.450774,0.448631) RGB{Float64}(0.450698,0.448819,0.446686)\n RGB{Float64}(0.444293,0.442405,0.440309) RGB{Float64}(0.453718,0.451844,0.449694)\n RGB{Float64}(0.440023,0.438129,0.436058) … RGB{Float64}(0.454039,0.452165,0.450014)\n RGB{Float64}(0.441217,0.439324,0.437246) RGB{Float64}(0.45543,0.453558,0.451398)\n RGB{Float64}(0.446168,0.444282,0.442176) RGB{Float64}(0.447204,0.44532,0.443208)\n RGB{Float64}(0.446783,0.444898,0.442788) RGB{Float64}(0.444282,0.442394,0.440298)\n RGB{Float64}(0.449169,0.447288,0.445164) RGB{Float64}(0.443066,0.441175,0.439087)\n ⋮ ⋱ \n RGB{Float64}(0.450005,0.448125,0.445997) RGB{Float64}(0.454888,0.453015,0.450859)\n RGB{Float64}(0.457152,0.455283,0.453113) … RGB{Float64}(0.446942,0.445057,0.442947)\n RGB{Float64}(0.456044,0.454173,0.452009) RGB{Float64}(0.447434,0.44555,0.443437)\n RGB{Float64}(0.447761,0.445877,0.443762) RGB{Float64}(0.448295,0.446413,0.444294)\n RGB{Float64}(0.442367,0.440476,0.438392) RGB{Float64}(0.454562,0.452689,0.450534)\n RGB{Float64}(0.444085,0.442196,0.440102) RGB{Float64}(0.457341,0.455473,0.453302)\n RGB{Float64}(0.446014,0.444128,0.442023) … RGB{Float64}(0.454071,0.452197,0.450045)\n RGB{Float64}(0.450304,0.448425,0.446295) RGB{Float64}(0.450835,0.448956,0.446823)\n RGB{Float64}(0.452307,0.450431,0.448289) RGB{Float64}(0.45143,0.449552,0.447415)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "analyzer = NoiseAugmentation(Gradient(model), 50, 0.1)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "When used with a `Gradient` analyzer, this is equivalent to `SmoothGrad`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.450444,0.448564,0.446434) … RGB{Float64}(0.45208,0.450203,0.448063)\n RGB{Float64}(0.451525,0.449647,0.44751) RGB{Float64}(0.451511,0.449633,0.447496)\n RGB{Float64}(0.455755,0.453884,0.451722) RGB{Float64}(0.450817,0.448938,0.446805)\n RGB{Float64}(0.448593,0.446711,0.444591) RGB{Float64}(0.450455,0.448576,0.446445)\n RGB{Float64}(0.441146,0.439253,0.437176) RGB{Float64}(0.452042,0.450165,0.448025)\n RGB{Float64}(0.439896,0.438001,0.435931) … RGB{Float64}(0.453196,0.451321,0.449174)\n RGB{Float64}(0.44198,0.440088,0.438007) RGB{Float64}(0.456411,0.454541,0.452376)\n RGB{Float64}(0.444494,0.442606,0.44051) RGB{Float64}(0.447974,0.44609,0.443974)\n RGB{Float64}(0.444113,0.442224,0.44013) RGB{Float64}(0.441669,0.439777,0.437697)\n RGB{Float64}(0.452002,0.450125,0.447985) RGB{Float64}(0.443664,0.441775,0.439683)\n ⋮ ⋱ \n RGB{Float64}(0.447873,0.44599,0.443874) RGB{Float64}(0.451205,0.449327,0.447191)\n RGB{Float64}(0.456221,0.454351,0.452186) … RGB{Float64}(0.448932,0.44705,0.444928)\n RGB{Float64}(0.454016,0.452142,0.44999) RGB{Float64}(0.448083,0.4462,0.444083)\n RGB{Float64}(0.445034,0.443147,0.441047) RGB{Float64}(0.449519,0.447638,0.445513)\n RGB{Float64}(0.440373,0.438478,0.436406) RGB{Float64}(0.454007,0.452133,0.449982)\n RGB{Float64}(0.443401,0.441511,0.439421) RGB{Float64}(0.456432,0.454562,0.452397)\n RGB{Float64}(0.445844,0.443957,0.441853) … RGB{Float64}(0.454384,0.452511,0.450357)\n RGB{Float64}(0.450126,0.448246,0.446117) RGB{Float64}(0.45111,0.449232,0.447097)\n RGB{Float64}(0.452035,0.450158,0.448018) RGB{Float64}(0.451456,0.449578,0.447441)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "analyzer = SmoothGrad(model, 50)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We can also use any distribution from\n", + "[Distributions.jl](https://github.com/JuliaStats/Distributions.jl),\n", + "for example Poisson noise with rate $\\lambda=0.5$:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.385968,0.384011,0.382249) … RGB{Float64}(0.387228,0.385273,0.383504)\n RGB{Float64}(0.386976,0.38502,0.383252) RGB{Float64}(0.388324,0.386369,0.384594)\n RGB{Float64}(0.389137,0.387183,0.385403) RGB{Float64}(0.390234,0.388281,0.386495)\n RGB{Float64}(0.38535,0.383393,0.381635) RGB{Float64}(0.383153,0.381194,0.379448)\n RGB{Float64}(0.38339,0.381431,0.379684) RGB{Float64}(0.396267,0.394319,0.392499)\n RGB{Float64}(0.38226,0.3803,0.378559) … RGB{Float64}(0.39826,0.396314,0.394483)\n RGB{Float64}(0.381069,0.379108,0.377373) RGB{Float64}(0.393853,0.391903,0.390097)\n RGB{Float64}(0.382764,0.380804,0.37906) RGB{Float64}(0.387359,0.385403,0.383634)\n RGB{Float64}(0.376101,0.374136,0.37243) RGB{Float64}(0.372857,0.37089,0.369202)\n RGB{Float64}(0.384637,0.382679,0.380925) RGB{Float64}(0.377432,0.375469,0.373755)\n ⋮ ⋱ \n RGB{Float64}(0.388693,0.386738,0.384961) RGB{Float64}(0.379807,0.377846,0.376118)\n RGB{Float64}(0.390512,0.388559,0.386772) … RGB{Float64}(0.378634,0.376671,0.374951)\n RGB{Float64}(0.386639,0.384683,0.382917) RGB{Float64}(0.377059,0.375095,0.373383)\n RGB{Float64}(0.386524,0.384567,0.382802) RGB{Float64}(0.388142,0.386187,0.384413)\n RGB{Float64}(0.384815,0.382857,0.381102) RGB{Float64}(0.382534,0.380575,0.378832)\n RGB{Float64}(0.385302,0.383345,0.381587) RGB{Float64}(0.380766,0.378805,0.377072)\n RGB{Float64}(0.385349,0.383391,0.381633) … RGB{Float64}(0.384057,0.382098,0.380347)\n RGB{Float64}(0.385893,0.383936,0.382175) RGB{Float64}(0.382974,0.381015,0.37927)\n RGB{Float64}(0.386381,0.384425,0.382661) RGB{Float64}(0.385464,0.383507,0.381748)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "using Distributions\n", + "\n", + "analyzer = NoiseAugmentation(Gradient(model), 50, Poisson(0.5))\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Is is also possible to define your own distributions or mixture distributions.\n", + "\n", + "`NoiseAugmentation` can be combined with any analyzer type from the Julia-XAI ecosystem,\n", + "for example `LRP` from [RelevancePropagation.jl](https://github.com/Julia-XAI/RelevancePropagation.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Integration augmentation\n", + "The `InterpolationAugmentation` wrapper computes explanations\n", + "averaged over `n` steps of linear interpolation between the input and a reference input,\n", + "which is set to `zero(input)` by default:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n ⋮ ⋱ \n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABDdJREFUeAHtwVtPFAcYx+HfzLwLu8uCsZFdUasQa1JpNepl/QrVxkO/qkn1thrvjFoktWAUU1DZBZVF9jDD9OqPNyZG88qheZ/Hfrt6leDHCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrox9rKREEhKk2WwirVYL2ehuICvLK0iv30MSEr4lI7gygisjuDL2g4SPSnZUR6vIaHUUSZIEGQ6HiGWGTByaQNKNFFl8tohkaYY0m00kSRK+lhFcGcGVEVwZu6gyUkH6vT6ysbGB1Go1pF6vI72tHlKxCvL69Wuk0WggU1NTyNvaW+TNmzeIVSrI1tYWUq/X+VpGcGUEV0ZwZXxjWZYh7XYb6ff6SLfbRY4dO4Z0u10kzVKk0+nwKXmeI0tLS0hZlsjs7CwyGA6QLM2QlZUVpCxLvoQRXBnBlRFcGd9AmqXIq1evkPn5eaRSqSA/nzuHjIyOIGmSsqPks+aezCHNZgupmCHdzS5yaOIQsra2xo6Ej0q+iBFcGcGVEVwZTvI8R1ZftZGxsToy+9MsMlIZQcYbDb5ESYkUeYGc/P4kMjk5iZgZ8vfTp8joyAhSr9eRcrvkaxnBlRFcGcGV4aRarSKXL/+CTB2dQmZmppHbd+4gMzMzyKlTp5Dbf9xGWq0WsrC4gJw5cwbp9/rIh60PSGetg2RZhrTbbaTZaiEVM76WEVwZwZURXBlO8iLnU6ZnppGbv99Ert+4gQwGfWR5eQV59PARcuXKr8itW7eQWr2ObG5uIkmaIO/fvUcmJsaRWrWKpGmKByO4MoIrI7gyvJTseLb4DHnxYglZXFhE3r17h5w4cRx5v7GB5HmO/Hn3LvLj2bPIgwcP+JSyLJEkSZBiWCBpmuLNCK6M4MoIroxvrMhz5P79+3zK/Pw8nzMYDJDz588jR48eRdbX15Hlf5eRwWDAbjGCKyO4MoIrYx8ryxIpigKZm5tD+r0+svDPAjIcDtkLRnBlBFdGcGXsM8+fP0cePnqEXL92DXn812NkYnwCySxDEhL2ghFcGcGVEVwZ+8D6+jqy9PIlMjM9jdy9dw8ZDofIpUsXkTEbY68ZwZURXBnBlbEPbPV6SK1WRbbLEjly5AjSbE4iY/Ux9hMjuDKCKyO4MvZIsV0ga2sdZHW1jYyPjyM/nD6NNBoN9isjuDKCKyO4MvbIh80PyPHjx5E0zZCxsTrSaDQ4CIzgygiujODK2EW1eg05/N1h5MmTJ8jFCxeQbrfLQWMEV0ZwZQRXxi5qTjaR1fYq0mq2kGK7QCqVCgeNEVwZwZURXBm7aKu3xY6SHUmaInmec5AZwZURXBnBlbGLOp0OkqUZUm5vI0macpAZwZURXBnBlbGLirxACgokTVP+L4zgygiujODqP7TeIGp427rdAAAAAElFTkSuQmCC", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "analyzer = InterpolationAugmentation(Gradient(model), 50)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "When used with a `Gradient` analyzer, this is equivalent to `IntegratedGradients`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n ⋮ ⋱ \n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) … RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)\n RGB{Float64}(0.308513,0.306531,0.305198) RGB{Float64}(0.308513,0.306531,0.305198)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABDdJREFUeAHtwVtPFAcYx+HfzLwLu8uCsZFdUasQa1JpNepl/QrVxkO/qkn1thrvjFoktWAUU1DZBZVF9jDD9OqPNyZG88qheZ/Hfrt6leDHCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrox9rKREEhKk2WwirVYL2ehuICvLK0iv30MSEr4lI7gygisjuDL2g4SPSnZUR6vIaHUUSZIEGQ6HiGWGTByaQNKNFFl8tohkaYY0m00kSRK+lhFcGcGVEVwZu6gyUkH6vT6ysbGB1Go1pF6vI72tHlKxCvL69Wuk0WggU1NTyNvaW+TNmzeIVSrI1tYWUq/X+VpGcGUEV0ZwZXxjWZYh7XYb6ff6SLfbRY4dO4Z0u10kzVKk0+nwKXmeI0tLS0hZlsjs7CwyGA6QLM2QlZUVpCxLvoQRXBnBlRFcGd9AmqXIq1evkPn5eaRSqSA/nzuHjIyOIGmSsqPks+aezCHNZgupmCHdzS5yaOIQsra2xo6Ej0q+iBFcGcGVEVwZTvI8R1ZftZGxsToy+9MsMlIZQcYbDb5ESYkUeYGc/P4kMjk5iZgZ8vfTp8joyAhSr9eRcrvkaxnBlRFcGcGV4aRarSKXL/+CTB2dQmZmppHbd+4gMzMzyKlTp5Dbf9xGWq0WsrC4gJw5cwbp9/rIh60PSGetg2RZhrTbbaTZaiEVM76WEVwZwZURXBlO8iLnU6ZnppGbv99Ert+4gQwGfWR5eQV59PARcuXKr8itW7eQWr2ObG5uIkmaIO/fvUcmJsaRWrWKpGmKByO4MoIrI7gyvJTseLb4DHnxYglZXFhE3r17h5w4cRx5v7GB5HmO/Hn3LvLj2bPIgwcP+JSyLJEkSZBiWCBpmuLNCK6M4MoIroxvrMhz5P79+3zK/Pw8nzMYDJDz588jR48eRdbX15Hlf5eRwWDAbjGCKyO4MoIrYx8ryxIpigKZm5tD+r0+svDPAjIcDtkLRnBlBFdGcGXsM8+fP0cePnqEXL92DXn812NkYnwCySxDEhL2ghFcGcGVEVwZ+8D6+jqy9PIlMjM9jdy9dw8ZDofIpUsXkTEbY68ZwZURXBnBlbEPbPV6SK1WRbbLEjly5AjSbE4iY/Ux9hMjuDKCKyO4MvZIsV0ga2sdZHW1jYyPjyM/nD6NNBoN9isjuDKCKyO4MvbIh80PyPHjx5E0zZCxsTrSaDQ4CIzgygiujODK2EW1eg05/N1h5MmTJ8jFCxeQbrfLQWMEV0ZwZQRXxi5qTjaR1fYq0mq2kGK7QCqVCgeNEVwZwZURXBm7aKu3xY6SHUmaInmec5AZwZURXBnBlbGLOp0OkqUZUm5vI0macpAZwZURXBnBlbGLirxACgokTVP+L4zgygiujODqP7TeIGp427rdAAAAAElFTkSuQmCC", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "analyzer = IntegratedGradients(model, 50)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "To select a different reference input, pass it to the `analyze` function\n", + "using the keyword argument `input_ref`.\n", + "Note that this is an arbitrary example for the sake of demonstration." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.409019,0.407085,0.405193) … RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.409518,0.407584,0.405689) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.414041,0.412112,0.410191) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.416505,0.414579,0.412644) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.403693,0.401754,0.399891) RGB{Float64}(0.403858,0.401919,0.400055)\n RGB{Float64}(0.401287,0.399345,0.397496) … RGB{Float64}(0.413245,0.411316,0.409399)\n RGB{Float64}(0.410847,0.408914,0.407011) RGB{Float64}(0.40079,0.398847,0.397001)\n RGB{Float64}(0.415844,0.413917,0.411986) RGB{Float64}(0.412815,0.410885,0.408971)\n RGB{Float64}(0.435989,0.434089,0.432041) RGB{Float64}(0.412814,0.410884,0.40897)\n RGB{Float64}(0.412335,0.410405,0.408493) RGB{Float64}(0.401388,0.399446,0.397597)\n ⋮ ⋱ \n RGB{Float64}(0.392085,0.390133,0.388337) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.404857,0.402919,0.40105) … RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.411016,0.409084,0.40718) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.386425,0.384468,0.382704) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.408805,0.40687,0.404979) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.404115,0.402176,0.400311) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.409222,0.407288,0.405394) … RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.411927,0.409996,0.408087) RGB{Float64}(0.405703,0.403765,0.401891)\n RGB{Float64}(0.405703,0.403765,0.401891) RGB{Float64}(0.405703,0.403765,0.401891)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "matrix_of_ones = ones(Float32, size(input))\n", + "\n", + "analyzer = InterpolationAugmentation(Gradient(model), 50)\n", + "expl = analyzer(input; input_ref=matrix_of_ones)\n", + "heatmap(expl)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Once again, `InterpolationAugmentation` can be combined with any analyzer type from the Julia-XAI ecosystem,\n", + "for example `LRP` from [RelevancePropagation.jl](https://github.com/Julia-XAI/RelevancePropagation.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.1/generated/augmentations.jl b/v0.8.1/generated/augmentations.jl new file mode 100644 index 0000000..57463a5 --- /dev/null +++ b/v0.8.1/generated/augmentations.jl @@ -0,0 +1,47 @@ +using ExplainableAI +using VisionHeatmaps +using Flux + +using BSON # hide +model = BSON.load("../model.bson", @__MODULE__)[:model] # hide +model + +using MLDatasets +using ImageCore, ImageIO, ImageShow + +index = 10 +x, y = MNIST(Float32, :test)[10] +input = reshape(x, 28, 28, 1, :) + +convert2image(MNIST, x) + +analyzer = Gradient(model) +heatmap(input, analyzer) + +analyzer = NoiseAugmentation(Gradient(model), 50) +heatmap(input, analyzer) + +analyzer = NoiseAugmentation(Gradient(model), 50, 0.1) +heatmap(input, analyzer) + +analyzer = SmoothGrad(model, 50) +heatmap(input, analyzer) + +using Distributions + +analyzer = NoiseAugmentation(Gradient(model), 50, Poisson(0.5)) +heatmap(input, analyzer) + +analyzer = InterpolationAugmentation(Gradient(model), 50) +heatmap(input, analyzer) + +analyzer = IntegratedGradients(model, 50) +heatmap(input, analyzer) + +matrix_of_ones = ones(Float32, size(input)) + +analyzer = InterpolationAugmentation(Gradient(model), 50) +expl = analyzer(input; input_ref=matrix_of_ones) +heatmap(expl) + +# This file was generated using Literate.jl, https://github.com/fredrikekre/Literate.jl diff --git a/v0.8.1/generated/augmentations/index.html b/v0.8.1/generated/augmentations/index.html new file mode 100644 index 0000000..10059ae --- /dev/null +++ b/v0.8.1/generated/augmentations/index.html @@ -0,0 +1,35 @@ + +Input augmentations · ExplainableAI.jl

Analyzer augmentations

All analyzers implemented in ExplainableAI.jl can be augmented by two types of augmentations: NoiseAugmentations and InterpolationAugmentations. These augmentations are wrappers around analyzers that modify the input before passing it to the analyzer.

We build on the basics shown in the Getting started section and start out by loading the same pre-trained LeNet5 model and MNIST input data:

using ExplainableAI
+using VisionHeatmaps
+using Flux
+
+model
Chain(
+  Conv((5, 5), 1 => 6, relu),           # 156 parameters
+  MaxPool((2, 2)),
+  Conv((5, 5), 6 => 16, relu),          # 2_416 parameters
+  MaxPool((2, 2)),
+  Flux.flatten,
+  Dense(256 => 120, relu),              # 30_840 parameters
+  Dense(120 => 84, relu),               # 10_164 parameters
+  Dense(84 => 10),                      # 850 parameters
+)                   # Total: 10 arrays, 44_426 parameters, 174.867 KiB.
using MLDatasets
+using ImageCore, ImageIO, ImageShow
+
+index = 10
+x, y = MNIST(Float32, :test)[10]
+input = reshape(x, 28, 28, 1, :)
+
+convert2image(MNIST, x)

Noise augmentation

The NoiseAugmentation wrapper computes explanations averaged over noisy inputs. Let's demonstrate this on the Gradient analyzer. First, we compute the heatmap of an explanation without augmentation:

analyzer = Gradient(model)
+heatmap(input, analyzer)

Now we wrap the analyzer in a NoiseAugmentation with 10 samples of noise. By default, the noise is sampled from a Gaussian distribution with mean 0 and standard deviation 1.

analyzer = NoiseAugmentation(Gradient(model), 50)
+heatmap(input, analyzer)

Note that a higher sample size is desired, as it will lead to a smoother heatmap. However, this comes at the cost of a longer computation time.

We can also set the standard deviation of the Gaussian distribution:

analyzer = NoiseAugmentation(Gradient(model), 50, 0.1)
+heatmap(input, analyzer)

When used with a Gradient analyzer, this is equivalent to SmoothGrad:

analyzer = SmoothGrad(model, 50)
+heatmap(input, analyzer)

We can also use any distribution from Distributions.jl, for example Poisson noise with rate $\lambda=0.5$:

using Distributions
+
+analyzer = NoiseAugmentation(Gradient(model), 50, Poisson(0.5))
+heatmap(input, analyzer)

Is is also possible to define your own distributions or mixture distributions.

NoiseAugmentation can be combined with any analyzer type from the Julia-XAI ecosystem, for example LRP from RelevancePropagation.jl.

Integration augmentation

The InterpolationAugmentation wrapper computes explanations averaged over n steps of linear interpolation between the input and a reference input, which is set to zero(input) by default:

analyzer = InterpolationAugmentation(Gradient(model), 50)
+heatmap(input, analyzer)

When used with a Gradient analyzer, this is equivalent to IntegratedGradients:

analyzer = IntegratedGradients(model, 50)
+heatmap(input, analyzer)

To select a different reference input, pass it to the analyze function using the keyword argument input_ref. Note that this is an arbitrary example for the sake of demonstration.

matrix_of_ones = ones(Float32, size(input))
+
+analyzer = InterpolationAugmentation(Gradient(model), 50)
+expl = analyzer(input; input_ref=matrix_of_ones)
+heatmap(expl)

Once again, InterpolationAugmentation can be combined with any analyzer type from the Julia-XAI ecosystem, for example LRP from RelevancePropagation.jl.


This page was generated using Literate.jl.

diff --git a/v0.8.1/generated/example.ipynb b/v0.8.1/generated/example.ipynb new file mode 100644 index 0000000..0a68bee --- /dev/null +++ b/v0.8.1/generated/example.ipynb @@ -0,0 +1,385 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Getting started" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For this first example, we already have loaded a pre-trained LeNet5 model\n", + "to look at explanations on the MNIST dataset." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Chain(\n Conv((5, 5), 1 => 6, relu), \u001b[90m# 156 parameters\u001b[39m\n MaxPool((2, 2)),\n Conv((5, 5), 6 => 16, relu), \u001b[90m# 2_416 parameters\u001b[39m\n MaxPool((2, 2)),\n Flux.flatten,\n Dense(256 => 120, relu), \u001b[90m# 30_840 parameters\u001b[39m\n Dense(120 => 84, relu), \u001b[90m# 10_164 parameters\u001b[39m\n Dense(84 => 10), \u001b[90m# 850 parameters\u001b[39m\n) \u001b[90m # Total: 10 arrays, \u001b[39m44_426 parameters, 174.867 KiB." + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using ExplainableAI\n", + "using Flux\n", + "\n", + "using BSON # hide\n", + "model = BSON.load(\"../model.bson\", @__MODULE__)[:model] # hide\n", + "model" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Preparing the input data\n", + "We use MLDatasets to load a single image from the MNIST dataset:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 reinterpret(reshape, ColorTypes.Gray{Float32}, ::Matrix{Float32}) with eltype ColorTypes.Gray{Float32}:\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n ⋮ ⋱ \n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAAAAADji6uXAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAjhJREFUaAW9wb2L1gUAB/DPcd+oQaPswCGqpSGHXqYTapGgJSg4CeoPcEiECqFDpCGwTdIQImuIsGiTtmjJgl6GoKEiIhqCoMQsOOhFy85r+A3H8fTo73mM7+cTZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWc7gTS1jBHlzGSXyK71xZlEVZlMUM7sYB7MWSrXbjH3yLj/E0/jYpyqIsymKEe3AAj+NGgx/xEb7HKj7HMnbgYXyBkyZFWZRFWVzFq1jBksH7+AqHcdHgfuzH67gP5/AyTuO8raIsyqIsprgBq9iHBZzHKziKP2x1CxbxPN7DHaaLsiiLsphiD57FAn7CXnxmq0XchlN4FzcbLOBNrJkUZVEWZTHFItYNLmE3HsNdBhewC7vwC3badA4v4JJJURZlURZTnMEHeAi34wQ2DNaxaNNOg8t4B0/hrP8WZVEWZTHFBazgJhzCA/gVP+B63ItlW72Gw1gzXZRFWZTFVazhkEmnsGzwGw7iDay7siiLsiiLOaziCZv2423jRFmURVnMaB+eQwy+xmnjRVmURVnMYBkvYpvB73gSfxkvyqIsymIGj2C7wZ94FJ+YTZRFWZTFSNuxatNb+NDsoizKoixG2IZvcJ3Bl3jGfKIsyqIsRngQt2LD4CAumk+URVmUxQhHsGFwFGfML8qiLMpihB1YwM94ybWJsiiLshjhGI7hCM66NlEWZVEWIxzHcf+PKIuyKPsXNwdYfgiRxs8AAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "using MLDatasets\n", + "using ImageCore, ImageIO, ImageShow\n", + "\n", + "index = 10\n", + "x, y = MNIST(Float32, :test)[10]\n", + "\n", + "convert2image(MNIST, x)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "By convention in Flux.jl, this input needs to be resized to WHCN format\n", + "by adding a color channel and batch dimensions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "input = reshape(x, 28, 28, 1, :);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "## Explanations\n", + "We can now select an analyzer of our choice and call `analyze`\n", + "to get an `Explanation`:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "analyzer = InputTimesGradient(model)\n", + "expl = analyze(input, analyzer);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The return value `expl` is of type `Explanation` and bundles the following data:\n", + "* `expl.val`: numerical output of the analyzer, e.g. an attribution or gradient\n", + "* `expl.output`: model output for the given analyzer input\n", + "* `expl.output_selection`: index of the output used for the explanation\n", + "* `expl.analyzer`: symbol corresponding the used analyzer, e.g. `:Gradient` or `:LRP`\n", + "* `expl.heatmap`: symbol indicating a preset heatmapping style,\n", + " e.g. `:attibution`, `:sensitivity` or `:cam`\n", + "* `expl.extras`: optional named tuple that can be used by analyzers\n", + " to return additional information.\n", + "\n", + "We used `InputTimesGradient`, so `expl.analyzer` is `:InputTimesGradient`." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": ":InputTimesGradient" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "expl.analyzer" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "By default, the explanation is computed for the maximally activated output neuron.\n", + "Since our digit is a 9 and Julia's indexing is 1-based,\n", + "the output neuron at index `10` of our trained model is maximally activated." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Finally, we obtain the result of the analyzer in form of an array." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28×1×1 Array{Float32, 4}:\n[:, :, 1, 1] =\n -0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 … -0.0 0.0 0.0\n -0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0\n -0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0\n 0.0 0.0 0.0 -0.0 -0.0 -0.0 -0.0 0.0 0.0 0.0\n 0.0 0.0 -0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0\n -0.0 0.0 0.0 -0.0 0.0 -0.0 -0.0 … 0.0 0.0 0.0\n -0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n -0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 -0.0\n -0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 0.0 0.0 -0.0\n -0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.385115 0.0714216 0.0\n ⋮ ⋮ ⋱ ⋮ \n 0.0 -0.0 -0.0 0.0 0.0 0.0 -0.0 -0.0 0.0 0.0\n -0.0 -0.0 0.0 0.0 0.0 0.0 -0.0 … -0.0 0.0 0.0\n -0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0\n -0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 0.0 0.0\n -0.0 0.0 0.0 -0.0 -0.0 0.0 -0.0 0.0 0.0 0.0\n 0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 0.0 0.0 0.0\n 0.0 0.0 0.0 -0.0 -0.0 0.0 0.0 … 0.0 0.0 0.0\n 0.0 0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 0.0 0.0\n 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "expl.val" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "## Heatmapping basics\n", + "Since the array `expl.val` is not very informative at first sight,\n", + "we can visualize `Explanation`s by computing a `heatmap` using either\n", + "[VisionHeatmaps.jl](https://julia-xai.github.io/XAIDocs/VisionHeatmaps/stable/) or\n", + "[TextHeatmaps.jl](https://julia-xai.github.io/XAIDocs/TextHeatmaps/stable/)." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "using VisionHeatmaps\n", + "\n", + "heatmap(expl)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "If we are only interested in the heatmap, we can combine analysis and heatmapping\n", + "into a single function call:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "For a more detailed explanation of the `heatmap` function,\n", + "refer to the heatmapping section." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## List of analyzers" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Neuron selection\n", + "By passing an additional index to our call to `analyze`,\n", + "we can compute an explanation with respect to a specific output neuron.\n", + "Let's see why the output wasn't interpreted as a 4 (output neuron at index 5)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9oFgQYx/Hv+76/d76be3VzNf8w9DRQIaVMtAJBj1INM4gsJfKQsJsShRcP0jkRI2QdJJuEHiQQPHgJ0cQwRUVKUDuo5ZTx6qY5ne/W6XnWIQjH49zi+Xw0OjpKiiNSKJFCiRRKpFAihRIplEihRAolUiiRQokUSqRQIoUSKZRIoUQKJVIokUKJFEqkUCKFEimUSKFECiVSKJFCiRRKTGY3b+KKRcyX38/FbN36C2P6MPv3r8V8+N4wrlzmWRIplEihRAolJoPHj3HnzmEuNq3AbNuGO3bsLmO+ZkwfZuPGu5ju7g2Yri7ct59exC1ahJMYL5FCiRRKpFBiAt26havVcHv2NGDWrFmBOXQI19mJ6+5uwTx58g1m927c8eM/YAYG7mMWLGjG7P3pJcwnnUM4ifESKZRIoUQKJZ6x3l7cjRu4z7rvY3bsaMa0l/ox69+ZhamPFDClEv/q7FncoUNdmGPHcNu24datw+34o4LZvh03bRpPRaRQIoUSKZQIMjyMq9VwH6wfwt2+jWvqwBQe4oZntGHKBVypxH/64vNBnITZsKERU6/j9u7FHTiAK5cZN5FCiRRKpFAiSPnXC5jmpUtxra2Y/loN09bXh3mxvZ2nMTqKKzCKu3IFd+kSptDWhtnUMQ3z/o9rMGWN4goFxkukUCKFEimUiFIsYprKZUytVsOU+YcTJ3C9vbihIdzatbjGRszoRx9jCpd/w/X24pYtwx05gqtWMeXz53GbN+NmzGC8RAolUiiRQokoixfjTp7EtPb0YAZ7ejB969djfmbMG4yZdfo0rqUFUzxzBjd7Nu7UKdzdu7j+ftyuXbiODlypRASRQokUSqRQIkqxiFu+HFN/ZTmmumsXpnr6NOatmTNxd+7g+vtxv/+OO3oU9+gRbngY19aG27QJN38+rlAgmkihRAolUijxjJVKjGlqwq1ezVO5dw937Rpu3jzcqlW4lStx1SoTRaRQIoUSKZSYxA4exFUqMzFvVyq4ri7MjTmvYjqqPBcihRIplEihxCSzbx9uyxbc4cO47177CrO4iFsyh+dOpFAihRIplJgEHjzADQ7idu7E3byJa2jALViAk3juRAolUiiRQolJYPp03Ny5uHffHMINDGAGG9sx1SqTikihRAolUijxnNTruDNncNev485frmCWttcw1SqTlkihRAolUigxkUZGMFevFjELF+Ik3MAAY5bMYSoQKZRIoUQKJSbSgweYzs4qpjBSxywrXsDUX38ZVygwFYgUSqRQIoUSE6lexxTu3MY1N+MWLcKUSkw5IoUSKZRIocREqlQwfz5swZT/wr0wa4SpTKRQIoUSKZSYSENDmEqlgmloYEyxyFQmUiiRQokUSkyklhZMK/9PIoUSKZRIof4G+FXTyaR4K3oAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "expl = analyze(input, analyzer, 5)\n", + "heatmap(expl)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "This heatmap shows us that the \"upper loop\" of the hand-drawn 9 has negative relevance\n", + "with respect to the output neuron corresponding to digit 4!" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Analyzing batches\n", + "ExplainableAI also supports explanations of input batches:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "batchsize = 20\n", + "xs, _ = MNIST(Float32, :test)[1:batchsize]\n", + "batch = reshape(xs, 28, 28, 1, :) # reshape to WHCN format\n", + "expl = analyze(batch, analyzer);" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "This will return a single `Explanation` `expl` for the entire batch.\n", + "Calling `heatmap` on `expl` will detect the batch dimension and return a vector of heatmaps." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "20-element Vector{Matrix{ColorTypes.RGB{Float64}}}:\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); … ; RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); … ; RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); … ; RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); … ; RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093)]", + "text/html": [ + "
(a vector displayed as a row to save space)
" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl)" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "For more information on heatmapping batches,\n", + "refer to the heatmapping documentation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.1/generated/example.jl b/v0.8.1/generated/example.jl new file mode 100644 index 0000000..0cef228 --- /dev/null +++ b/v0.8.1/generated/example.jl @@ -0,0 +1,41 @@ +using ExplainableAI +using Flux + +using BSON # hide +model = BSON.load("../model.bson", @__MODULE__)[:model] # hide +model + +using MLDatasets +using ImageCore, ImageIO, ImageShow + +index = 10 +x, y = MNIST(Float32, :test)[10] + +convert2image(MNIST, x) + +input = reshape(x, 28, 28, 1, :); + +analyzer = InputTimesGradient(model) +expl = analyze(input, analyzer); + +expl.analyzer + +expl.val + +using VisionHeatmaps + +heatmap(expl) + +heatmap(input, analyzer) + +expl = analyze(input, analyzer, 5) +heatmap(expl) + +batchsize = 20 +xs, _ = MNIST(Float32, :test)[1:batchsize] +batch = reshape(xs, 28, 28, 1, :) # reshape to WHCN format +expl = analyze(batch, analyzer); + +heatmap(expl) + +# This file was generated using Literate.jl, https://github.com/fredrikekre/Literate.jl diff --git a/v0.8.1/generated/example/index.html b/v0.8.1/generated/example/index.html new file mode 100644 index 0000000..c9db0ec --- /dev/null +++ b/v0.8.1/generated/example/index.html @@ -0,0 +1,48 @@ + +Getting started · ExplainableAI.jl

Getting started

Note

This package is part of a wider Julia XAI ecosystem. For an introduction to this ecosystem, please refer to the Getting started guide.

For this first example, we already have loaded a pre-trained LeNet5 model to look at explanations on the MNIST dataset.

using ExplainableAI
+using Flux
+
+model
Chain(
+  Conv((5, 5), 1 => 6, relu),           # 156 parameters
+  MaxPool((2, 2)),
+  Conv((5, 5), 6 => 16, relu),          # 2_416 parameters
+  MaxPool((2, 2)),
+  Flux.flatten,
+  Dense(256 => 120, relu),              # 30_840 parameters
+  Dense(120 => 84, relu),               # 10_164 parameters
+  Dense(84 => 10),                      # 850 parameters
+)                   # Total: 10 arrays, 44_426 parameters, 174.867 KiB.
Supported models

ExplainableAI.jl can be used on any differentiable classifier.

Preparing the input data

We use MLDatasets to load a single image from the MNIST dataset:

using MLDatasets
+using ImageCore, ImageIO, ImageShow
+
+index = 10
+x, y = MNIST(Float32, :test)[10]
+
+convert2image(MNIST, x)

By convention in Flux.jl, this input needs to be resized to WHCN format by adding a color channel and batch dimensions.

input = reshape(x, 28, 28, 1, :);
Input format

For any explanation of a model, ExplainableAI.jl assumes the batch dimension to come last in the input.

For the purpose of heatmapping, the input is assumed to be in WHCN order (width, height, channels, batch), which is Flux.jl's convention.

Explanations

We can now select an analyzer of our choice and call analyze to get an Explanation:

analyzer = InputTimesGradient(model)
+expl = analyze(input, analyzer);

The return value expl is of type Explanation and bundles the following data:

  • expl.val: numerical output of the analyzer, e.g. an attribution or gradient
  • expl.output: model output for the given analyzer input
  • expl.output_selection: index of the output used for the explanation
  • expl.analyzer: symbol corresponding the used analyzer, e.g. :Gradient or :LRP
  • expl.heatmap: symbol indicating a preset heatmapping style, e.g. :attibution, :sensitivity or :cam
  • expl.extras: optional named tuple that can be used by analyzers to return additional information.

We used InputTimesGradient, so expl.analyzer is :InputTimesGradient.

expl.analyzer
:InputTimesGradient

By default, the explanation is computed for the maximally activated output neuron. Since our digit is a 9 and Julia's indexing is 1-based, the output neuron at index 10 of our trained model is maximally activated.

Finally, we obtain the result of the analyzer in form of an array.

expl.val
28×28×1×1 Array{Float32, 4}:
+[:, :, 1, 1] =
+ -0.0   0.0   0.0  -0.0  -0.0  -0.0  -0.0  …  -0.0       0.0         0.0
+ -0.0   0.0   0.0  -0.0  -0.0  -0.0  -0.0     -0.0       0.0         0.0
+ -0.0   0.0   0.0  -0.0  -0.0  -0.0  -0.0     -0.0       0.0         0.0
+  0.0   0.0   0.0  -0.0  -0.0  -0.0  -0.0      0.0       0.0         0.0
+  0.0   0.0  -0.0  -0.0  -0.0   0.0   0.0      0.0       0.0         0.0
+ -0.0   0.0   0.0  -0.0   0.0  -0.0  -0.0  …   0.0       0.0         0.0
+ -0.0   0.0   0.0   0.0   0.0   0.0   0.0      0.0       0.0         0.0
+ -0.0   0.0   0.0   0.0  -0.0   0.0  -0.0      0.0       0.0        -0.0
+ -0.0   0.0   0.0   0.0  -0.0  -0.0  -0.0      0.0       0.0        -0.0
+ -0.0   0.0   0.0   0.0  -0.0   0.0  -0.0      0.385115  0.0714216   0.0
+  ⋮                             ⋮          ⋱   ⋮                    
+  0.0  -0.0  -0.0   0.0   0.0   0.0  -0.0     -0.0       0.0         0.0
+ -0.0  -0.0   0.0   0.0   0.0   0.0  -0.0  …  -0.0       0.0         0.0
+ -0.0   0.0   0.0   0.0   0.0   0.0  -0.0      0.0       0.0         0.0
+ -0.0   0.0   0.0   0.0  -0.0   0.0  -0.0      0.0       0.0         0.0
+ -0.0   0.0   0.0  -0.0  -0.0   0.0  -0.0      0.0       0.0         0.0
+  0.0   0.0  -0.0  -0.0  -0.0   0.0  -0.0      0.0       0.0         0.0
+  0.0   0.0   0.0  -0.0  -0.0   0.0   0.0  …   0.0       0.0         0.0
+  0.0   0.0  -0.0  -0.0   0.0   0.0   0.0      0.0       0.0         0.0
+  0.0   0.0   0.0   0.0   0.0   0.0  -0.0      0.0       0.0         0.0

Heatmapping basics

Since the array expl.val is not very informative at first sight, we can visualize Explanations by computing a heatmap using either VisionHeatmaps.jl or TextHeatmaps.jl.

using VisionHeatmaps
+
+heatmap(expl)

If we are only interested in the heatmap, we can combine analysis and heatmapping into a single function call:

heatmap(input, analyzer)

For a more detailed explanation of the heatmap function, refer to the heatmapping section.

List of analyzers

Neuron selection

By passing an additional index to our call to analyze, we can compute an explanation with respect to a specific output neuron. Let's see why the output wasn't interpreted as a 4 (output neuron at index 5)

expl = analyze(input, analyzer, 5)
+heatmap(expl)

This heatmap shows us that the "upper loop" of the hand-drawn 9 has negative relevance with respect to the output neuron corresponding to digit 4!

Note

The output neuron can also be specified when calling heatmap:

heatmap(input, analyzer, 5)

Analyzing batches

ExplainableAI also supports explanations of input batches:

batchsize = 20
+xs, _ = MNIST(Float32, :test)[1:batchsize]
+batch = reshape(xs, 28, 28, 1, :) # reshape to WHCN format
+expl = analyze(batch, analyzer);

This will return a single Explanation expl for the entire batch. Calling heatmap on expl will detect the batch dimension and return a vector of heatmaps.

heatmap(expl)
(a vector displayed as a row to save space)

For more information on heatmapping batches, refer to the heatmapping documentation.


This page was generated using Literate.jl.

diff --git a/v0.8.1/generated/heatmapping.ipynb b/v0.8.1/generated/heatmapping.ipynb new file mode 100644 index 0000000..6863d9c --- /dev/null +++ b/v0.8.1/generated/heatmapping.ipynb @@ -0,0 +1,695 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Heatmapping\n", + "Since numerical explanations are not very informative at first sight,\n", + "we can visualize them by computing a `heatmap`, using either\n", + "[VisionHeatmaps.jl](https://julia-xai.github.io/XAIDocs/VisionHeatmaps/stable/) or\n", + "[TextHeatmaps.jl](https://julia-xai.github.io/XAIDocs/TextHeatmaps/stable/).\n", + "\n", + "This page showcases different options and preset for heatmapping,\n", + "building on the basics shown in the *Getting started* section.\n", + "\n", + "We start out by loading the same pre-trained LeNet5 model and MNIST input data:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Chain(\n Conv((5, 5), 1 => 6, relu), \u001b[90m# 156 parameters\u001b[39m\n MaxPool((2, 2)),\n Conv((5, 5), 6 => 16, relu), \u001b[90m# 2_416 parameters\u001b[39m\n MaxPool((2, 2)),\n Flux.flatten,\n Dense(256 => 120, relu), \u001b[90m# 30_840 parameters\u001b[39m\n Dense(120 => 84, relu), \u001b[90m# 10_164 parameters\u001b[39m\n Dense(84 => 10), \u001b[90m# 850 parameters\u001b[39m\n) \u001b[90m # Total: 10 arrays, \u001b[39m44_426 parameters, 174.867 KiB." + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using ExplainableAI\n", + "using VisionHeatmaps\n", + "using Flux\n", + "\n", + "using BSON # hide\n", + "model = BSON.load(\"../model.bson\", @__MODULE__)[:model] # hide\n", + "model" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 reinterpret(reshape, ColorTypes.Gray{Float32}, ::Matrix{Float32}) with eltype ColorTypes.Gray{Float32}:\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n ⋮ ⋱ \n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) … Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)\n Gray{Float32}(0.0) Gray{Float32}(0.0) Gray{Float32}(0.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAAAAADji6uXAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAjhJREFUaAW9wb2L1gUAB/DPcd+oQaPswCGqpSGHXqYTapGgJSg4CeoPcEiECqFDpCGwTdIQImuIsGiTtmjJgl6GoKEiIhqCoMQsOOhFy85r+A3H8fTo73mM7+cTZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWZVEWc7gTS1jBHlzGSXyK71xZlEVZlMUM7sYB7MWSrXbjH3yLj/E0/jYpyqIsymKEe3AAj+NGgx/xEb7HKj7HMnbgYXyBkyZFWZRFWVzFq1jBksH7+AqHcdHgfuzH67gP5/AyTuO8raIsyqIsprgBq9iHBZzHKziKP2x1CxbxPN7DHaaLsiiLsphiD57FAn7CXnxmq0XchlN4FzcbLOBNrJkUZVEWZTHFItYNLmE3HsNdBhewC7vwC3badA4v4JJJURZlURZTnMEHeAi34wQ2DNaxaNNOg8t4B0/hrP8WZVEWZTHFBazgJhzCA/gVP+B63ItlW72Gw1gzXZRFWZTFVazhkEmnsGzwGw7iDay7siiLsiiLOaziCZv2423jRFmURVnMaB+eQwy+xmnjRVmURVnMYBkvYpvB73gSfxkvyqIsymIGj2C7wZ94FJ+YTZRFWZTFSNuxatNb+NDsoizKoixG2IZvcJ3Bl3jGfKIsyqIsRngQt2LD4CAumk+URVmUxQhHsGFwFGfML8qiLMpihB1YwM94ybWJsiiLshjhGI7hCM66NlEWZVEWIxzHcf+PKIuyKPsXNwdYfgiRxs8AAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "using MLDatasets\n", + "using ImageCore, ImageIO, ImageShow\n", + "\n", + "index = 10\n", + "x, y = MNIST(Float32, :test)[10]\n", + "input = reshape(x, 28, 28, 1, :)\n", + "\n", + "img = convert2image(MNIST, x)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "## Automatic heatmap presets\n", + "The function `heatmap` automatically applies common presets for each method.\n", + "\n", + "Since `InputTimesGradient` computes attributions,\n", + "heatmaps are shown in a blue-white-red color scheme.\n", + "Gradient methods however are typically shown in grayscale:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.461087,0.459224,0.457032) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.468989,0.467139,0.464901) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.479787,0.477956,0.475654) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.459915,0.45805,0.455864) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.445069,0.443181,0.441081) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.445034,0.443146,0.441047) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.457174,0.455305,0.453135) RGB{Float64}(0.463812,0.461953,0.459745)\n RGB{Float64}(0.466269,0.464414,0.462192) RGB{Float64}(0.463755,0.461896,0.459688)\n RGB{Float64}(0.470723,0.468876,0.466628) RGB{Float64}(0.452716,0.45084,0.448697)\n RGB{Float64}(0.485669,0.483847,0.481511) RGB{Float64}(0.450914,0.449035,0.446902)\n ⋮ ⋱ \n RGB{Float64}(0.46542,0.463564,0.461346) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.481108,0.479278,0.476969) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.456239,0.454368,0.452204) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.443836,0.441947,0.439855) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.435607,0.433706,0.431661) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.452624,0.450747,0.448604) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.451326,0.449448,0.447312) … RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.467146,0.465293,0.463065) RGB{Float64}(0.464131,0.462273,0.460063)\n RGB{Float64}(0.464131,0.462273,0.460063) RGB{Float64}(0.464131,0.462273,0.460063)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "analyzer = Gradient(model)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "analyzer = InputTimesGradient(model)\n", + "heatmap(input, analyzer)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "## Custom heatmap settings\n", + "### Color schemes\n", + "We can partially or fully override presets by passing keyword arguments to `heatmap`.\n", + "For example, we can use a custom color scheme from ColorSchemes.jl using the keyword argument `colorscheme`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.498,1.0,0.498) … RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) … RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n ⋮ ⋱ \n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) … RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) … RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)\n RGB{Float64}(0.498,1.0,0.498) RGB{Float64}(0.498,1.0,0.498)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBlJREFUeAHtwV1oFXQYx/Hv3OPK7cw5t1WaulyTMB2FJiq+RGBdpHXlbFFBeBP0QkREENSmF1KBBWZeVUYUmvMqJkEZoRm+lSWVVCvfSCt1HJdnM53buvr9z81AHM+2s3g+H2vubyb4MYIrI7gygisjuDKCKyO4MoIrI7gygisjuDKCKyO4MoIrI7gygisjuDKCKyO4MoIrI7gygisjuDKCKyO4MoIrI7gygiujgF3BGEgj25E7vj9MUkeyYfwzyGkmI9fzL0PJCK6M4MoIrowCUEYXUko3MoN25EbOIDWcJTHyiknq+Q0p5wKyiSeRCjqRhexFiullsIzgygiujODKGEYZcsifTEIOMRdZym5kIlnkR2Yhd3IYOTG7FrmdI8j9xz5FstMnIJ9xHzKNk8hZapCb+IvBMoIrI7gygitjiPUxBtlOI3KKm5E/slOQqZUnkbOsRMroQtqZwUD+5gbk0PQ5SBdlyPOsR6rpQC5xHbKNRqSXYq6FEVwZwZURXBlOiuhH6jiKtNKI7F83n+QyyYKWfUgFnUgJl5E+xnA1q9iGNPExUkoXsofFyGL2ILtZihTRz2AZwZURXBnBleGkh7HIJp5CKjiPlL/0DzKPg8gSvuJa9DEGuUA58gprkYXsRbopQ17kVWQPS5A5fIv0UsxgGcGVEVwZwZXhpJIs0spKZMp3p0jeItn33nxkwZH9JO+QtL2xHFlxegeybXIjsurXVpJbSX4ono3s4m7kHr5E2ngAmcpJpIJOBssIrozgygiuDCcXKEdylJO8S9KymaRo837kC/Imkbd69Q7kpwaSVT+3khwl7xJJXcMx5BduQy4yDnmMDxDjCh6M4MoIrozgyhgCW3kIyWzMIS0PryeZTd468hrIy5DM+oS8DSS5tzNIpi+HjKUH6aEE6aYUMa7gzQiujODKCK6MIZYjg7QsamZAr3FVz96yAal8OYtkDuRI6kg+qn4EOcE0hosRXBnBlRFcGQWsmF6kgyqkcm2WpIzk9eoXkG5KGQlGcGUEV0ZwZRSYNT0tJMtIJu7KIs89+CYyl2+QfoqQIvoZCUZwZQRXRnBlFIA2VpCsJ28tydO7NpKcIalo7ETqaWekGcGVEVwZwZVRAM5RQzKdvInkNZAspw2pp51CYgRXRnBlBFfGCLnIOOTE0VqSveSNJ3m84X2kluMUKiO4MoIrI7gyRshB5iHL6j5Hdj5xLzJh5nmkluOMBkZwZQRXRnBlDKN6fkfmcwBpZg2yZWYT8jWLGG2M4MoIrozgyhhGj17+ENla0oTcxUHkHNVIFR2MNkZwZQRXRnBlDKOOkirkDDUMpIMqRjMjuDKCKyO4MobRFpqQYnqRUrqRfooYzYzgygiujODKGEbnqGYgGXL8XxjBlRFcGcHVf7tyzX/YHIl6AAAAAElFTkSuQmCC", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "using ColorSchemes\n", + "\n", + "expl = analyze(input, analyzer)\n", + "heatmap(expl; colorscheme=:jet)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n ⋮ ⋱ \n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABD9JREFUeAHtwT1vlQUYx+Hf85z7nNP2nNMWW1pASqAhiCQGJCqDLA4OJg4ufgL9Cm7OJn4EB12c1UkHHXQxIVESE4zQkDbS1vLSoi2n7Xl7Xpz+dWlCaG76Yu7rsh+uvU/wYwRXRnBlBFdGcGUEV0ZwZQRXRnBlBFdGcGUEV0ZwZQRXRnBlBFdGcGUEV0ZwZQRXRnBlBFdGcGUEV0ZwZQRXRnBlBFfGIVaUCbuZmXyEnDi3hPTaDeTu/Cyy3a8hlbTkeTKCKyO4MoIr4xCwNEcsLZDm8DZSr/WRWr2PlGWKlGWCNIc6iKU5cufxFFJLC2RqZBNJEvbMCK6M4MoIrox9ZGmOdAY15HFnBJlutJFadYA82WoiY0kbWZk/gzRbm8jM7D1k858xZOXJONKo9ZFuVkWGqwP2ygiujODKCK6M56ws2fHnxjFkKzPk734VaVT7SG9tCrE0R9rdYXZzrF9D7i6eQbKigrx8ahmp1QZIUSTI0qNppCThWRjBlRFcGcGV4aZEmvUucm99Avn+fgMpyhJ559Q2UktzJE1LpCThaX5aPIvMttqIpQWytjGOTI6tI6sb43gwgisjuDKCK8NJUabI3No0Uq3kyBsTA+T4UBeZbmzyLMqSHYOiglyZXEUmRzeQPK8gN1dmkIdbLWRieAsp2TsjuDKCKyO4MpzUKxly/cJt5IXTD5HW5SVk7qvryMlzS0jr0iJy65u3kNNnF5F7C2eR2ZfmkW57BGlvjCKr68eQk41NZLHdQhrVPlKr5OyVEVwZwZURXBlOBkUFyTJDWpeWkOTDL5CLH7CjKDOk13uAnP3jc6T+0SvI7Ke/I/XRLSSp5EieGTK01UDyIkXOj+dImpR4MIIrI7gygivjOVhanUbuf/ku8urcx0hnvYVMXL2LpGstpMgmkPKzG8jY5TXkrx+vIFbNkCQpkbJMkKxIkTQp8WYEV0ZwZQRXxnOWFRXklxuvs6s7F3ma8zOLyMybOTJ2YhXptRvIwvw5ZKs/xH4xgisjuDKCK+MQSyiRQb+GdH6uIEVmyO25C0hWVDgIRnBlBFdGcGUcMr8+mkK+fdBHPrmaITe/m0UmR7aRsmRHknAgjODKCK6M4Mo4BJbao8it9Qry2vgw8vXCGaSbs+PtUzkyWu9x0IzgygiujODKOAS6eQVpVdkxVCmRY7UcOdPYQkbrPQ4TI7gygisjuDIOSF6kyMp2HXnYKZBqmiLXjj9BmrUeh5URXBnBlRFcGQdktTOCXBzbRPKyiUwP9ZFmrcdRYARXRnBlBFfGPmrVO8hE8wny2/3TyHvnF5DV9ihHjRFcGcGVEVwZ+2hmZhlZXn4ROT7UQXqDKlK3jKPGCK6M4MoIrox91OsOId1Bld30MuMoM4IrI7gygitjHy0/OIGkCTsszflPwlFmBFdGcGUEV8Y+6mVVdmOVgv8LI7gygisjuPoXPq8hi3xV0roAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; colorscheme=:inferno)" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Refer to the [ColorSchemes.jl catalogue](https://juliagraphics.github.io/ColorSchemes.jl/stable/basics/)\n", + "for a gallery of available color schemes." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Color channel reduction\n", + "Explanations have the same dimensionality as the inputs to the classifier.\n", + "For images with multiple color channels,\n", + "this means that the explanation also has a \"color channel\" dimension.\n", + "\n", + "The keyword argument `reduce` can be used to reduce this dimension\n", + "to a single scalar value for each pixel.\n", + "The following presets are available:\n", + "- `:sum`: sum up color channels (default setting)\n", + "- `:norm`: compute 2-norm over the color channels\n", + "- `:maxabs`: compute `maximum(abs, x)` over the color channels" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; reduce=:sum)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; reduce=:norm)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; reduce=:maxabs)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "In this example, the heatmaps look identical.\n", + "Since MNIST only has a single color channel, there is no need for color channel reduction." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Mapping explanations onto the color scheme\n", + "To map a color-channel-reduced explanation onto a color scheme,\n", + "we first need to normalize all values to the range $[0, 1]$.\n", + "\n", + "For this purpose, two presets are available through the `rangescale` keyword argument:\n", + "- `:extrema`: normalize to the minimum and maximum value of the explanation\n", + "- `:centered`: normalize to the maximum absolute value of the explanation.\n", + " Values of zero will be mapped to the center of the color scheme.\n", + "\n", + "Depending on the color scheme, one of these presets may be more suitable than the other.\n", + "The default color scheme for `InputTimesGradient`, `seismic`, is centered around zero,\n", + "making `:centered` a good choice:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABBtJREFUeAHtwU9I1gcYwPGvvk9qv/fVF9KyDpmZoisZlTUK+kMdtkUdIiiD4bGOa4PYYQ62S4Ug/bl06RCd2lrQcK5asGgs6OCCRRtGWYeNDmVbLNNme/Xd6XnsIETy+Po6ns9H8vk8wY8QXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCcGVEFwJwZUQXAnBlRBcCUUsl2NS0vsN5swZTEMDprMT9U8yD1VRwbQSgishuBKCK6EYDA9jRkZQcu8e5tEjzOAgJpXClJZiBgZQFbW1qO9+XYLKZjHr12NSKaZMCK6E4EoIroRCev4cNZTPoO7eTaPaWpjw9CmmtRVz6xZm3z5Mfz/m5EnMqlWoxvcPoOrqMIODmIULmTIhuBKCKyG4EqbZ+Djm+58yqIcPMbdvY+o+S6MyW7ej5paPY5qamFRtLWr8w49Qw8OY5h97MTeeoOaWl2P27MGkUrwJIbgSgishuBK85POYBw9Qv/y9DLVzJ+blS8zly5hsFlNWxitKeZ3DF1ei9lZhkgRTuWED5vp1zKZNmHyeqRKCKyG4EoIrwUlurAT1w8AyVDaLOXIEs3YtZuNG3sj4OGZoCPPpJznMjRuYJEGdu9+GWr58B6q14iUmlWKqhOBKCK6E4EpwIi+GUO/98RXm5Leot3p6UNlLlzDtp1Gj586hyvv6MKdOoUoPHEBlDx3CNDRgVq7EbN6M2lKH6e3FLF5chsqWMWVCcCUEV0JwJXiprMRUVqJGenpQx3nFtm2oUiZkmPBxVxfq6/PnUbuHhjD372NGRzFVVZjmZtT8pXNRHR1plAguhOBKCK6E4EqYDu3tqGT7dtTnu3ZhVqxA/Xv8OGpOYyMmnUbtbmtDjZw9i0q6uzHPnmFyOUxZGSZJUFKCOyG4EoIrIbgSplsmg7lyhcnMOXaM1zpxAvX7zZuolqtXMQ0NmIMHMUuWUChCcCUEV0JwJRSzsTFMTQ2qZfVqTDqN6erCJAkzQQiuhOBKCK6EItPZiTl8+DdU/vG7qJ+bP0CtWYPJ5zElzAwhuBKCKyG4EopAby/m6FHMli1vo7a2Yx4/xly4gGlqYsYJwZUQXAnBlVAEBgcxS5di5s3DtLZiduzANDVRVITgSgiuhOBKmCEvXmCuXcP09w+jqqrSqO5uTH09RUsIroTgSgiuhBnS14fZvx8zOppGrVuHqa9nVhCCKyG4EoIroZAGBlCbKv5CXXzyDurLL+6g/pzfwmwjBFdCcCUEV0IhnT6N6ehAralnQmkNqrqaWUcIroTgSgiuhEJatAizYAEmx4TqamYzIbgSgishuBIKae9ezNgYKkmYUFLCbCYEV0JwJQRXQiHV1DCZDP8fQnAlBFdCcPUfZaDIbeMVzvAAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; rangescale=:centered)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.54288,0.54288,1.0) … RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) … RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n ⋮ ⋱ \n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) … RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) … RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)\n RGB{Float64}(0.54288,0.54288,1.0) RGB{Float64}(0.54288,0.54288,1.0)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABCxJREFUeAHtwU9oFQQcwPHvcz9zI9+e880JuXmaysbLRBHMKU6FRRuCl0BIVETwIIGg+e+w6KKiiB0Ed/HQFJI6WKiTwFYYejDBP2RiEiqID524V85/c77X6fd7Hgbh+G17i9/nI/v2FQh+hOBKCK6E4EoIroTgSgiuhOBKCK6E4EoIroTgSgiuhOBKCK6E4EoIroTgSgiuhOBKCK6E4EoIroTgSgiuhOBKCK6E4EooYa9eYRIJzMaNmMknjmAaG1Gdtz5E3bmDqahgWAnBlRBcCcGVUAIqKzETJ2Jmz8bU1mKqKl5gxo/HlJWhMhlMKoVpb8ek05iWFkxZGUMmBFdCcCUEV8IISqUwd+9izp3DrFiBmTIFc/EiZuHCclRv8xrU9PKHqLkXvkfNXbQI9d371aj6esz9+5i6OoZMCK6E4EoIroRhls9jOjowt29jcrl7qPr6WlQ2i0kmMdeuMaimphrUrzdXop5cwhw4gJlaU0C9eJlAHT6MGRjgrQjBlRBcCcGV4GTcOExDA6ajA3P58n6KXqHmzduFSqcxEyZgXr/mPzU1vUCtW1eOSiYxXV2Y1tYE6tQpTCLBkAnBlRBcCcGV4OTlS0x7O2byZN6wFbVkSQLV1sZbyecxuRzm4MFyVEsLpq8Ps2oVpqsLs3gxZmCAIROCKyG4EoIrwUlNDebShX5MZyfmyi7UvWMPUbW/HMPs3o367es/UPMf/4j6+Z2PUEt7vsU0NqL+npZBnTyJWbkS09mJmTEDU1XFkAnBlRBcCcGV4CSXwzx//Q6qYs8e1Jc9PZi6BGocRZMo+uxGJ+r02rWotuPHMdevY54/R6WqqlB1ddNQfX2YLVswIrgQgishuBKCK8FJoYA5dAgzacdfqC+efoWZPx+zaRNmwQJMKoVq27EDs3Mn5vx5TG8vpr8f1d+PefoUI4I7IbgSgishuBKGWS6H2c9mzAWKPr3CoP7EfL51EerR3r2o6hMnMA0NqB/+WYq6dQtTKDCshOBKCK6E4EooYSKYgVQaVb19OyaZRHXcXIp68oRRIQRXQnAlBFdCidm2rZeiNaiampOob37fi2quxuTzmESCUSEEV0JwJQRXQgk4epQ3HKFoM2r16p8oeoxKpz9BZTKMOiG4EoIrIbgSSkA2yxvqKJpE0UxUa2sSlclQUoTgSgiuhOBKGCXPnmEePbpB0WWK3kVt2DAPNXMmJUsIroTgSgiuhFHS3Y1ZtqwB1d29CpVIzEHNmoUpFChZQnAlBFdCcCWMoEwGs3w5Zv16zNmzc1BnzmAKBcYEIbgSgishuBJG0MfvXUWd7fkA1dyMyWYxU6cy5gjBlRBcCcGVMJKmT0fdv8qgHjxgTBOCKyG4EoIrYQQdO12FEsEkk5h8njFNCK6E4EoIroQRlM0yqMpK/jeE4EoIroTg6l97ktn367SfrQAAAABJRU5ErkJggg==", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; rangescale=:extrema)" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "However, for the `inferno` color scheme, which is not centered around zero,\n", + "`:extrema` leads to a heatmap with higher contrast." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n ⋮ ⋱ \n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) … RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)\n RGB{Float64}(0.732796,0.214332,0.332053) RGB{Float64}(0.732796,0.214332,0.332053)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABD9JREFUeAHtwT1vlQUYx+Hf85z7nNP2nNMWW1pASqAhiCQGJCqDLA4OJg4ufgL9Cm7OJn4EB12c1UkHHXQxIVESE4zQkDbS1vLSoi2n7Xl7Xpz+dWlCaG76Yu7rsh+uvU/wYwRXRnBlBFdGcGUEV0ZwZQRXRnBlBFdGcGUEV0ZwZQRXRnBlBFdGcGUEV0ZwZQRXRnBlBFdGcGUEV0ZwZQRXRnBlBFfGIVaUCbuZmXyEnDi3hPTaDeTu/Cyy3a8hlbTkeTKCKyO4MoIr4xCwNEcsLZDm8DZSr/WRWr2PlGWKlGWCNIc6iKU5cufxFFJLC2RqZBNJEvbMCK6M4MoIrox9ZGmOdAY15HFnBJlutJFadYA82WoiY0kbWZk/gzRbm8jM7D1k858xZOXJONKo9ZFuVkWGqwP2ygiujODKCK6M56ws2fHnxjFkKzPk734VaVT7SG9tCrE0R9rdYXZzrF9D7i6eQbKigrx8ahmp1QZIUSTI0qNppCThWRjBlRFcGcGV4aZEmvUucm99Avn+fgMpyhJ559Q2UktzJE1LpCThaX5aPIvMttqIpQWytjGOTI6tI6sb43gwgisjuDKCK8NJUabI3No0Uq3kyBsTA+T4UBeZbmzyLMqSHYOiglyZXEUmRzeQPK8gN1dmkIdbLWRieAsp2TsjuDKCKyO4MpzUKxly/cJt5IXTD5HW5SVk7qvryMlzS0jr0iJy65u3kNNnF5F7C2eR2ZfmkW57BGlvjCKr68eQk41NZLHdQhrVPlKr5OyVEVwZwZURXBlOBkUFyTJDWpeWkOTDL5CLH7CjKDOk13uAnP3jc6T+0SvI7Ke/I/XRLSSp5EieGTK01UDyIkXOj+dImpR4MIIrI7gygivjOVhanUbuf/ku8urcx0hnvYVMXL2LpGstpMgmkPKzG8jY5TXkrx+vIFbNkCQpkbJMkKxIkTQp8WYEV0ZwZQRXxnOWFRXklxuvs6s7F3ma8zOLyMybOTJ2YhXptRvIwvw5ZKs/xH4xgisjuDKCK+MQSyiRQb+GdH6uIEVmyO25C0hWVDgIRnBlBFdGcGUcMr8+mkK+fdBHPrmaITe/m0UmR7aRsmRHknAgjODKCK6M4Mo4BJbao8it9Qry2vgw8vXCGaSbs+PtUzkyWu9x0IzgygiujODKOAS6eQVpVdkxVCmRY7UcOdPYQkbrPQ4TI7gygisjuDIOSF6kyMp2HXnYKZBqmiLXjj9BmrUeh5URXBnBlRFcGQdktTOCXBzbRPKyiUwP9ZFmrcdRYARXRnBlBFfGPmrVO8hE8wny2/3TyHvnF5DV9ihHjRFcGcGVEVwZ+2hmZhlZXn4ROT7UQXqDKlK3jKPGCK6M4MoIrox91OsOId1Bld30MuMoM4IrI7gygitjHy0/OIGkCTsszflPwlFmBFdGcGUEV8Y+6mVVdmOVgv8LI7gygisjuPoXPq8hi3xV0roAAAAASUVORK5CYII=", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; rangescale=:centered, colorscheme=:inferno)" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.555627,0.139927,0.411201) … RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) … RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n ⋮ ⋱ \n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) … RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) … RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)\n RGB{Float64}(0.555627,0.139927,0.411201) RGB{Float64}(0.555627,0.139927,0.411201)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABEpJREFUeAHtwUtvVAUYx+HfOfOemc60lLZKgXIrIhEvYAJEE0mI8bIwumJhYty5MPETuNA9OzeaqN+AjZrgyqgQjRpjiJoQSwIo2iIUwtWZTumcmXNc/YdNEwJ5e4G8z2MfPPoOwY8RXBnBlRFcGcGVEVwZwZURXBnBlRFcGcGVEVwZwZURXBnBlRFcGcGVEVwZwZURXBnBlRFcGcGVEVwZwZURXBnBlRFcGatYUbKoXSM3kF1bppFmaxD5eWYSaeaGWFqylIzgygiujODKWAWytECypETGareQRpYjjayDFEWClGWCjNYWkGpaICeuNZBaSt/mRo6kCffMCK6M4MoIroxllKUF0soNuTifIVsHF5AB6yJX5hvIeFIiUzPbkIcac8iezf8gV26OIH+1tiDDWQ9p9yrIkPW4V0ZwZQRXRnBlLLGypO/UzRrSzOm7vNBFhjND2jdGkGpaItc6VRYzl2fIL7MbkU6RIM+uu4rUsw7SK1Lk1PUxpCThbhjBlRFcGcGVsQRGqx1k6uYgcqT5A1KUXeTN4eeRgUoXqSQlUnJnn02vQZ4coS9LSmSmNYRsGWohM601SMJtJXfHCK6M4MoIrgwnRUnfiauDSK1C30vVA8hEPUG2DubcjbKkr1OkyMHxHNk0OIfkRQU5NjuMzLRryIZ6jhQk3CsjuDKCKyO4MpwMVArk0PZ/kW0bLiKb9k0hX33+KvLElmlk0+7TyNGjryBPbZpGfpuZRJ7ZfhZptoaQy61hZLpZRyYHe8jpZgVZm1WQWqXgXhnBlRFcGcGV4aRTpEinZ8jEnjNI9v5HyGvv0VeUOXKrPY3sO/k1svlwFcnePYsMDTeRtFIgC11Dhm7VkW6ZIHtGCiRNcGEEV0ZwZQRXxhI4dX0M+fPIIeTVqQ+RGzfWIjv3n0TmL48h3e465Prha8jWveeRX48dQKqWI5W0RHplguRFiqQJ7ozgygiujODKWGKdIkW++H0vizn+9w7uZP/6i8hzL55CJsYvIc3WEHJiZhK5mWcsFyO4MoIrI7gyVrGEEpnPq8ilbx9Hul1Dvj+3A8nLlJVgBFdGcGUEV8Yqc3w2Rb5sfYp88thbyDfHDyIb6zlSlvQlCSvCCK6M4MoIroxV4Mx/GfJT8SPydON15OOZFtJKLyJvpJPIWK3LSjOCKyO4MoIrYxVo9+hbm25EGr0BZNwayM7hh5GxWs5qYgRXRnBlBFfGCsmLBDnXvoXMFlNIzerIy6MNZKSas1oZwZURXBnBlbFCLswbsm/UkN71F5DNWQMZqebcD4zgygiujODKWEaj1Q4y0Wgj311ai7z9SIGcn+txvzGCKyO4MoIrYxntXn8B+ePyRmSi3kPaXUPqVnC/MYIrI7gygitjGc0tDCDtrrGY+V6F+5kRXBnBlRFcGcto6uo6JOG2LC15UBjBlRFcGcGVsYzmexUWU01LHhRGcGUEV0Zw9T+xbho1jPSiMwAAAABJRU5ErkJggg==", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ], + "cell_type": "code", + "source": [ + "heatmap(expl; rangescale=:extrema, colorscheme=:inferno)" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "For the full list of `heatmap` keyword arguments, refer to the `heatmap` documentation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Heatmap overlays\n", + "Heatmaps can be overlaid onto the input image using the `heatmap_overlay` function\n", + "from VisionHeatmaps.jl.\n", + "This can be useful for visualizing the relevance of specific regions of the input:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.6,0.6,0.6) … RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) … RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n ⋮ ⋱ \n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) … RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) … RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)\n RGB{Float64}(0.6,0.6,0.6) RGB{Float64}(0.6,0.6,0.6)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABHlJREFUeAHtwd9P1QUYx/E38gAHzjkd5w9AnQqh5VRSa5VstmW5tbW2Ltja+gP6J/ofumjrxm67am511UW1lQuGqDBTDD3oRB0gBh1HwuF4Oud7uvp8u2lrskeE9rxedvbsWYIfI7gygisjuDKCKyO4MoIrI7gygisjuDKCKyO4MoIrI7gygisjuDKCKyO4MoIrI7gygisjuDKCKyO4MoIrI7gygisjuDI2sFzuBSSTySB9j5eQXXfvktqxA5ns6UFmHi0j5fISz5IRXBnBlRFcGRvAtmwWOXLwINKbzSKZapXU8jKpSoXU9u1I5+HDSJLPI0O/bUGWluaRhw9HkEYjYa2M4MoIrozgylhH27JZpO/wq0g+34cc2NsgVSwiK4UC8uDWLeRxLoccKxSQxXPnkM7XXkP29g4g/f37kAsXSsjs7CRrZQRXRnBlBFfGM3bq1FtIudyLrKxkkKkpUrXaLFKuNSFXfvoJqScJ/6arUECG9vcgJw8cRfaVisjq7QXk/Z1bka8WWpFKtcrTMIIrI7gygivDSXNzM3Jszx4kmz2EfPFFE7K8vIqcOTOJDA1dRRqNGk/j51sHkD//vIeMjIwjH3/4NpJvbiZ18CCpyUnWygiujODKCK4MJ11duxHrfhep15uQ995bQaamfkQqld95Ok2IWQ7p672JHG0/gLTl88jYZAeya9crSPnuDaRaq7FWRnBlBFdGcGU4sdoT5HBpCGkduYnkhoeRnadPI9mr15Dc7duIffopUj9/Htk6OIhsHRlBKvfvIx0vvUSquxt5uYvUxYuryMzMNSRJEtbKCK6M4MoIrgwnc6USMlerIZ3j48jFXA5pGhtDSvwjs38/8s7kJHJldhZ58cIFUouLSEe9TmpxEWl0dSELj2eQubkxpFot48EIrozgygiuDCe1Wg35oVRCWt94Azk+Oop0nziBlL/7Dil3dCDF6WlkbyaDPLl8GWkbHCRVqZCq15EbU1PIpXv3kGq1ijcjuDKCKyO4Mp6xalMTcmlggH81OMh/OZ0kSHLlCtJdLCLVQgEZzeeR4swM0mg0eJaM4MoIrozgytjAjvX3I338Y8viIqnWVmS4sxO5ff8+z4MRXBnBlRFcGRvMzZuHkNHRbuTNz3cg93YPIPl8Cbnzzbc8b0ZwZQRXRnBlbADz853I8vJJ5MiRVuSzL0k9evQX0tMzjCRJnefNCK6M4MoIrowNYNu2fUi93opks6S6umrI7Oz3SJLMs5EYwZURXBnBlfHctCDt7ceR+fknSCbThhw9egtZWJhjozKCKyO4MoIrYx21tLQgJ058hORyW5AkaUMKhT+QYnGEzcAIrozgygiujHW0u6UFOV74HZlY7kU++eAB8vUv40i9XmczMIIrI7gygitjHb1erZJqb0f2byd1deIOsrQ0x2ZjBFdGcGUEV8Y6auvsJJXPI5WVVWTizh02MyO4MoIrI7gy1tG1tjZkIEmQ69d/Rcqrq2xmRnBlBFdGcGWso4npaWRiepr/IyO4MoIrI7j6G3lGOIbBRyS4AAAAAElFTkSuQmCC", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ], + "cell_type": "code", + "source": [ + "heatmap_overlay(expl, img)" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "The alpha value of the heatmap can be adjusted using the `alpha` keyword argument:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.3,0.3,0.3) … RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) … RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n ⋮ ⋱ \n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) … RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) … RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)\n RGB{Float64}(0.3,0.3,0.3) RGB{Float64}(0.3,0.3,0.3)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABJFJREFUeAHtwd9r1QUYx/H3dh6Pm9p+sDl1dGoylDKdFSkKqdMLlZJCrbu6qUsLopu66M6M6A8wwsRQhkFTLGqVsJiRiqjBlObYlHRZ+WtnnqXz7Hi2dfX5eiOE8ji3eF4v27BhA8GPEVwZwZURXBnBlRFcGcGVEVwZwZURXBnBlRFcGcGVEVwZwZURXBnBlRFcGcGVEVwZwZURXBnBlRFcGcGVEVwZwZURXBkT2OzZ9UhlZQWyfG4Dsqi6GhkrK0O+P3sW+a33HHLp0l88SEZwZQRXRnBlTAANmQzy4vr1yPKmJqRi6lQShQKJq1dJTJuGzF+9Ghk1Q37tziI9PV1Ia+sOpFi8zf0ygisjuDKCK2Mczc1kkHUvvow888wKZE5dmkR/P9KfzyNdR48il/v7kU1r1yLnDh5E5i1ZgsyaVYVkMs8hV678jvz00/fcLyO4MoIrI7gyHrAtW95CGhuXIel0BZLNkrh4sRO5ePEC0tKyGykUCtzNE08/jWzvOIRseWoxMr/yJnL9zyvIO6++hJw8cRjJDQ5yL4zgygiujODKcJJOp5HN69cjy5atRQ4fJjEwMIhks23IoUP7kUIhz724fOtRJJ8vRfbs2Yt8/OEHyMwpU0jU1ODBCK6M4MoIrgwnCxcuQp5f9zoyOkqiri6LtLZ+hFy71sO9KC1NIdXVtcgffe3IJ++/jcyorET+umJIRcVs5MTP7cjNoSHulxFcGcGVEVwZTlJjo0jt0Hmk/NIgUn/6NLK8sRqprW9C6lMppHTFCqTQ24tkVq5EHs3nkcFiEal65BES1dVILXf09FxHWvZ+hRSLRe6XEVwZwZURXBlOTnV1Iae6upBFo6PIPzNnIs11ddxNijsaKiuRy5kMMqdQIHHrFlJVXk5iaAgZmz4dOdF5DPns853IwEAWD0ZwZQRXRnBlOBkeHka27dqFzCgrQ15paECeXLoUyXV2Iv1DQ8jZWbOQuTU1yAh3pBYsIFEskhgbQ348eBDZvW8fcuPmTbwZwZURXBnBlfGA3cjnkS+6u0l0d/OfenuRdzduROZwx4xr15BbJSXIzo4OpP3IEWRkZIQHyQiujODKCK6MCWzzpk3IyjVrkNILF0ikUsin7e1Ixy+/8DAYwZURXBnBlTHBPP74OmTa9BeQ0tlVSK7yMSSX60MOHzvGw2YEV0ZwZQRXxgRQVTUfaW5+A6mvL0eOniSRy+WR777bjty+fZuHzQiujODKCK6MCWDx4qVITU05kk6TSKeHkZaWrUhfXxcTiRFcGcGVEVwZD8nUqdOQ5ubNyN9/jyBmKaSvrwPp6zvNRGUEV0ZwZQRXxjgqLy9Htm3bjtTUpJCSEhK53HmkpWUHk4ERXBnBlRFcGeOoqbERmTczhVweJvHs/BvIe1t3IoVCgcnACK6M4MoIroxx9NqqVchYKoVUVZHYv/9b5MyZTiYbI7gygisjuDLG0YzaWqSkrAzJDQwi3/zwA5OZEVwZwZURXBnj6Ovjx5E3m5qQ1tYvkWw2y2RmBFdGcGUEV8Y4OtDWhhxoa+P/yAiujODKCK7+BcDPJtPljcfMAAAAAElFTkSuQmCC", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ], + "cell_type": "code", + "source": [ + "heatmap_overlay(expl, img; alpha=0.3)" + ], + "metadata": {}, + "execution_count": 15 + }, + { + "cell_type": "markdown", + "source": [ + "All previously discussed keyword arguments for `heatmap` can also be used with `heatmap_overlay`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "28×28 Array{RGB{Float64},2} with eltype ColorTypes.RGB{Float64}:\n RGB{Float64}(0.388939,0.0979491,0.287841) … RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) … RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n ⋮ ⋱ \n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) … RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) … RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)\n RGB{Float64}(0.388939,0.0979491,0.287841) RGB{Float64}(0.388939,0.0979491,0.287841)", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAABwCAIAAABJgmMcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABHxJREFUeAHtwUtvlAUUx+FfZ05n2tILFFqgUKi1XppqvZF4CQuVxOgHcOHCqPET+DncuDchceXGaGI0JupCNDHxRqDS0kKBFmuhHSAznWnn0nnfcfUHF24gh9Ka8zz2/sE3CH6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgygiujODKCK6M4MoIrozgytjGurq6kVwuhxwb60aeeixFNqodyLd/VJHlQgmpblS4n4zgygiujODK2Ab29PUgYw8dRR45shfp6cwgeWsifX1FJJfvQI4fG0WqzQxy5loTKRdvItcvnkVarZR7ZQRXRnBlBFfGFurv60EODI8iPYPDyMHuFtLdUUVW11IkqawgU5U68sxED7LbLiD9nYeQq6Ue5FD3PiTdGEFWli5zr4zgygiujODKuM+enJxE2voOI81sDlmqJ0ijcguZrawhF+fOI0mS8F+6egeQH/+4iUxMDiNPDtWQVnMdGT8+jJz8Ygmp1RvcDSO4MoIrI7gynGQzWeSpx48inQdGke8qM0hto4qMFHqR5b/nkFbS5G78VupF1pMsMjN7ATm07xiyryODXNvoxIMRXBnBlRFcGU727N2LtAYnkLTFbY83R5HLM78ja9W/uCttbUh7vgvpKy8iJ159AslYHpku55BCvR3ZWF1AGptN7pURXBnBlRFcGU7yWW57YfAGMjRQRroOzSGfVfqRR4d3IUcnSsgvvz6HDO9eQVZqo8hzD1eQ4loGqaXtSKGWRwY7EmSh2ESuzl1C0jTlXhnBlRFcGcGV4eR64SaystqPjD97Dcm//QHy3rvclqYJstkoIC99eBoZeGcIKXyyjnR01pBMNo+UynWk3MghS4UVZHFqGmnUa3gwgisjuDKCK8NJkiTI5z/MIt/8bMhbP32E5HOHkb1HLyLF64asl/YgtY+zyOHxJnLp7Dhi2QRpa2shVxavIqf/nEc2NzfxZgRXRnBlBFfGfVZtNJGTX/Mvl7kjyx0t7riFvPnKCDLy8nWkf3cJqZQN+fKnG8jcwjLSarW4n4zgygiujODK2MYeGRtDBvYPIaWz7UiaZJBPvy8gi0vLPAhGcGUEV0ZwZWwzpd4R5FT3ZWSy+ihydmoCaa8Xkb+WZ3jQjODKCK6M4MrYBjbyA0jbeBYZy76MfFOoIZW0gOSnF5A0TXjQjODKCK6M4MrYBvbsG0Qa7T1IPs0hPS1DatPTyGa5wHZiBFdGcGUEV8YD0pZtR7qHjyCXmlNIezaH9BfXkLS8wnZlBFdGcGUEV8YWMjNk4sUTSGdHHmmtTyK5jTqyMPsnO4ERXBnBlRFcGVto5MBu5OnBFDlX5LbX97eQr06dQ5I0YScwgisjuDKCK2MLvfb8AFJMM0h/LkVmLl5B1m6tstMYwZURXBnBlbGF0rZdSD3NIvVGA5mdX2QnM4IrI7gygitjC506cwOZmNiPXJm/gNRqNXYyI7gygisjuDK20Pn5BeT8/AL/R0ZwZQRXRnD1D0ARSI2WzRzmAAAAAElFTkSuQmCC", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ], + "cell_type": "code", + "source": [ + "heatmap_overlay(expl, img; alpha=0.7, colorscheme=:inferno, rangescale=:extrema)" + ], + "metadata": {}, + "execution_count": 16 + }, + { + "cell_type": "markdown", + "source": [ + "## Heatmapping batches\n", + "Heatmapping also works with input batches.\n", + "Let's demonstrate this by using a batch of 25 images from the MNIST dataset:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "xs, ys = MNIST(Float32, :test)[1:25]\n", + "batch = reshape(xs, 28, 28, 1, :); # reshape to WHCN format" + ], + "metadata": {}, + "execution_count": 17 + }, + { + "cell_type": "markdown", + "source": [ + "The `heatmap` function automatically recognizes\n", + "that the explanation is batched and returns a `Vector` of images:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "25-element Vector{Matrix{ColorTypes.RGB{Float64}}}:\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); … ; RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0)]\n [RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); … ; RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); … ; RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0); RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) … RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0) RGB{Float64}(0.9999998474121093,0.9999998474121093,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n ⋮\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); … ; RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093); RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) … RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093) RGB{Float64}(1.0,0.9999998474121093,0.9999998474121093)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]\n [RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); … ; RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0); RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)]", + "text/html": [ + "
(a vector displayed as a row to save space)
" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ], + "cell_type": "code", + "source": [ + "heatmaps = heatmap(batch, analyzer)" + ], + "metadata": {}, + "execution_count": 18 + }, + { + "cell_type": "markdown", + "source": [ + "Image.jl's `mosaic` function can used to display them in a grid:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "140×140 MosaicViews.MosaicView{ColorTypes.RGB{Float64}, 4, Base.ReshapedArray{ColorTypes.RGB{Float64}, 4, PaddedViews.PaddedView{ColorTypes.RGB{Float64}, 3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}, StackViews.StackView{ColorTypes.RGB{Float64}, 3, 3, Vector{OffsetArrays.OffsetMatrix{ColorTypes.RGB{Float64}, PaddedViews.PaddedView{ColorTypes.RGB{Float64}, 2, Tuple{Base.IdentityUnitRange{UnitRange{Int64}}, Base.IdentityUnitRange{UnitRange{Int64}}}, Matrix{ColorTypes.RGB{Float64}}}}}}}, Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}, Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ], + "cell_type": "code", + "source": [ + "mosaic(heatmaps; nrow=5)" + ], + "metadata": {}, + "execution_count": 19 + }, + { + "cell_type": "markdown", + "source": [ + "When heatmapping batches, the mapping to the color scheme is applied per sample.\n", + "For example, `rangescale=:extrema` will normalize each heatmap\n", + "to the minimum and maximum value of each sample in the batch.\n", + "This ensures that heatmaps don't depend on other samples in the batch.\n", + "\n", + "If this bevahior is not desired,\n", + "`heatmap` can be called with the keyword-argument `process_batch=true`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "140×140 MosaicViews.MosaicView{ColorTypes.RGB{Float64}, 4, Base.ReshapedArray{ColorTypes.RGB{Float64}, 4, PaddedViews.PaddedView{ColorTypes.RGB{Float64}, 3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}, StackViews.StackView{ColorTypes.RGB{Float64}, 3, 3, Vector{OffsetArrays.OffsetMatrix{ColorTypes.RGB{Float64}, PaddedViews.PaddedView{ColorTypes.RGB{Float64}, 2, Tuple{Base.IdentityUnitRange{UnitRange{Int64}}, Base.IdentityUnitRange{UnitRange{Int64}}}, Matrix{ColorTypes.RGB{Float64}}}}}}}, Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}, Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ], + "cell_type": "code", + "source": [ + "expl = analyze(batch, analyzer)\n", + "heatmaps = heatmap(expl; process_batch=true)\n", + "mosaic(heatmaps; nrow=5)" + ], + "metadata": {}, + "execution_count": 20 + }, + { + "cell_type": "markdown", + "source": [ + "This can be useful when comparing heatmaps for fixed output neurons:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "140×140 MosaicViews.MosaicView{ColorTypes.RGB{Float64}, 4, Base.ReshapedArray{ColorTypes.RGB{Float64}, 4, PaddedViews.PaddedView{ColorTypes.RGB{Float64}, 3, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}, Base.OneTo{Int64}}, StackViews.StackView{ColorTypes.RGB{Float64}, 3, 3, Vector{OffsetArrays.OffsetMatrix{ColorTypes.RGB{Float64}, PaddedViews.PaddedView{ColorTypes.RGB{Float64}, 2, Tuple{Base.IdentityUnitRange{UnitRange{Int64}}, Base.IdentityUnitRange{UnitRange{Int64}}}, Matrix{ColorTypes.RGB{Float64}}}}}}}, Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}, Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}}}:\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n ⋮ ⋱ \n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) … RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)\n RGB{Float64}(1.0,1.0,1.0) RGB{Float64}(1.0,1.0,1.0)", + "image/png": "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", + "text/html": [ + "" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ], + "cell_type": "code", + "source": [ + "expl = analyze(batch, analyzer, 7) # explain digit \"6\"\n", + "heatmaps = heatmap(expl; process_batch=true)\n", + "mosaic(heatmaps; nrow=5)" + ], + "metadata": {}, + "execution_count": 21 + }, + { + "cell_type": "markdown", + "source": [ + "## Processing heatmaps\n", + "Heatmapping makes use of the\n", + "[Julia-based image processing ecosystem Images.jl](https://github.com/JuliaImages).\n", + "\n", + "If you want to further process heatmaps, you may benefit from reading about some\n", + "[fundamental conventions](https://juliaimages.org/latest/tutorials/quickstart/)\n", + "that the ecosystem utilizes that are different from how images are typically represented\n", + "in OpenCV, MATLAB, ImageJ or Python." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Saving heatmaps\n", + "Since heatmaps are regular Images.jl images, they can be saved as such:\n", + "```julia\n", + "using FileIO\n", + "\n", + "img = heatmap(input, analyzer)\n", + "save(\"heatmap.png\", img)\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "\n", + "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.1/generated/heatmapping.jl b/v0.8.1/generated/heatmapping.jl new file mode 100644 index 0000000..03b04f4 --- /dev/null +++ b/v0.8.1/generated/heatmapping.jl @@ -0,0 +1,66 @@ +using ExplainableAI +using VisionHeatmaps +using Flux + +using BSON # hide +model = BSON.load("../model.bson", @__MODULE__)[:model] # hide +model + +using MLDatasets +using ImageCore, ImageIO, ImageShow + +index = 10 +x, y = MNIST(Float32, :test)[10] +input = reshape(x, 28, 28, 1, :) + +img = convert2image(MNIST, x) + +analyzer = Gradient(model) +heatmap(input, analyzer) + +analyzer = InputTimesGradient(model) +heatmap(input, analyzer) + +using ColorSchemes + +expl = analyze(input, analyzer) +heatmap(expl; colorscheme=:jet) + +heatmap(expl; colorscheme=:inferno) + +heatmap(expl; reduce=:sum) + +heatmap(expl; reduce=:norm) + +heatmap(expl; reduce=:maxabs) + +heatmap(expl; rangescale=:centered) + +heatmap(expl; rangescale=:extrema) + +heatmap(expl; rangescale=:centered, colorscheme=:inferno) + +heatmap(expl; rangescale=:extrema, colorscheme=:inferno) + +heatmap_overlay(expl, img) + +heatmap_overlay(expl, img; alpha=0.3) + +heatmap_overlay(expl, img; alpha=0.7, colorscheme=:inferno, rangescale=:extrema) + +xs, ys = MNIST(Float32, :test)[1:25] +batch = reshape(xs, 28, 28, 1, :); # reshape to WHCN format + +heatmaps = heatmap(batch, analyzer) + +mosaic(heatmaps; nrow=5) + +expl = analyze(batch, analyzer) +heatmaps = heatmap(expl; process_batch=true) +mosaic(heatmaps; nrow=5) + +expl = analyze(batch, analyzer, 7) # explain digit "6" +heatmaps = heatmap(expl; process_batch=true) +mosaic(heatmaps; nrow=5) + +# This file was generated using Literate.jl, https://github.com/fredrikekre/Literate.jl diff --git a/v0.8.1/generated/heatmapping/8a7b2f4e.png b/v0.8.1/generated/heatmapping/8a7b2f4e.png new file mode 100644 index 0000000..41fcc7a Binary files /dev/null and b/v0.8.1/generated/heatmapping/8a7b2f4e.png differ diff --git a/v0.8.1/generated/heatmapping/ca3a1608.png b/v0.8.1/generated/heatmapping/ca3a1608.png new file mode 100644 index 0000000..2aa388d Binary files /dev/null and b/v0.8.1/generated/heatmapping/ca3a1608.png differ diff --git a/v0.8.1/generated/heatmapping/ce7ad9ab.png b/v0.8.1/generated/heatmapping/ce7ad9ab.png new file mode 100644 index 0000000..af1bd37 Binary files /dev/null and b/v0.8.1/generated/heatmapping/ce7ad9ab.png differ diff --git a/v0.8.1/generated/heatmapping/index.html b/v0.8.1/generated/heatmapping/index.html new file mode 100644 index 0000000..f91c57a --- /dev/null +++ b/v0.8.1/generated/heatmapping/index.html @@ -0,0 +1,35 @@ + +Heatmapping · ExplainableAI.jl

Heatmapping

Since numerical explanations are not very informative at first sight, we can visualize them by computing a heatmap, using either VisionHeatmaps.jl or TextHeatmaps.jl.

This page showcases different options and preset for heatmapping, building on the basics shown in the Getting started section.

We start out by loading the same pre-trained LeNet5 model and MNIST input data:

using ExplainableAI
+using VisionHeatmaps
+using Flux
+
+model
Chain(
+  Conv((5, 5), 1 => 6, relu),           # 156 parameters
+  MaxPool((2, 2)),
+  Conv((5, 5), 6 => 16, relu),          # 2_416 parameters
+  MaxPool((2, 2)),
+  Flux.flatten,
+  Dense(256 => 120, relu),              # 30_840 parameters
+  Dense(120 => 84, relu),               # 10_164 parameters
+  Dense(84 => 10),                      # 850 parameters
+)                   # Total: 10 arrays, 44_426 parameters, 174.867 KiB.
using MLDatasets
+using ImageCore, ImageIO, ImageShow
+
+index = 10
+x, y = MNIST(Float32, :test)[10]
+input = reshape(x, 28, 28, 1, :)
+
+img = convert2image(MNIST, x)

Automatic heatmap presets

The function heatmap automatically applies common presets for each method.

Since InputTimesGradient computes attributions, heatmaps are shown in a blue-white-red color scheme. Gradient methods however are typically shown in grayscale:

analyzer = Gradient(model)
+heatmap(input, analyzer)
analyzer = InputTimesGradient(model)
+heatmap(input, analyzer)

Custom heatmap settings

Color schemes

We can partially or fully override presets by passing keyword arguments to heatmap. For example, we can use a custom color scheme from ColorSchemes.jl using the keyword argument colorscheme:

using ColorSchemes
+
+expl = analyze(input, analyzer)
+heatmap(expl; colorscheme=:jet)
heatmap(expl; colorscheme=:inferno)

Refer to the ColorSchemes.jl catalogue for a gallery of available color schemes.

Color channel reduction

Explanations have the same dimensionality as the inputs to the classifier. For images with multiple color channels, this means that the explanation also has a "color channel" dimension.

The keyword argument reduce can be used to reduce this dimension to a single scalar value for each pixel. The following presets are available:

  • :sum: sum up color channels (default setting)
  • :norm: compute 2-norm over the color channels
  • :maxabs: compute maximum(abs, x) over the color channels
heatmap(expl; reduce=:sum)
heatmap(expl; reduce=:norm)
heatmap(expl; reduce=:maxabs)

In this example, the heatmaps look identical. Since MNIST only has a single color channel, there is no need for color channel reduction.

Mapping explanations onto the color scheme

To map a color-channel-reduced explanation onto a color scheme, we first need to normalize all values to the range $[0, 1]$.

For this purpose, two presets are available through the rangescale keyword argument:

  • :extrema: normalize to the minimum and maximum value of the explanation
  • :centered: normalize to the maximum absolute value of the explanation. Values of zero will be mapped to the center of the color scheme.

Depending on the color scheme, one of these presets may be more suitable than the other. The default color scheme for InputTimesGradient, seismic, is centered around zero, making :centered a good choice:

heatmap(expl; rangescale=:centered)
heatmap(expl; rangescale=:extrema)

However, for the inferno color scheme, which is not centered around zero, :extrema leads to a heatmap with higher contrast.

heatmap(expl; rangescale=:centered, colorscheme=:inferno)
heatmap(expl; rangescale=:extrema, colorscheme=:inferno)

For the full list of heatmap keyword arguments, refer to the heatmap documentation.

Heatmap overlays

Heatmaps can be overlaid onto the input image using the heatmap_overlay function from VisionHeatmaps.jl. This can be useful for visualizing the relevance of specific regions of the input:

heatmap_overlay(expl, img)

The alpha value of the heatmap can be adjusted using the alpha keyword argument:

heatmap_overlay(expl, img; alpha=0.3)

All previously discussed keyword arguments for heatmap can also be used with heatmap_overlay:

heatmap_overlay(expl, img; alpha=0.7, colorscheme=:inferno, rangescale=:extrema)

Heatmapping batches

Heatmapping also works with input batches. Let's demonstrate this by using a batch of 25 images from the MNIST dataset:

xs, ys = MNIST(Float32, :test)[1:25]
+batch = reshape(xs, 28, 28, 1, :); # reshape to WHCN format

The heatmap function automatically recognizes that the explanation is batched and returns a Vector of images:

heatmaps = heatmap(batch, analyzer)
(a vector displayed as a row to save space)

Image.jl's mosaic function can used to display them in a grid:

mosaic(heatmaps; nrow=5)
Example block output

When heatmapping batches, the mapping to the color scheme is applied per sample. For example, rangescale=:extrema will normalize each heatmap to the minimum and maximum value of each sample in the batch. This ensures that heatmaps don't depend on other samples in the batch.

If this bevahior is not desired, heatmap can be called with the keyword-argument process_batch=true:

expl = analyze(batch, analyzer)
+heatmaps = heatmap(expl; process_batch=true)
+mosaic(heatmaps; nrow=5)
Example block output

This can be useful when comparing heatmaps for fixed output neurons:

expl = analyze(batch, analyzer, 7) # explain digit "6"
+heatmaps = heatmap(expl; process_batch=true)
+mosaic(heatmaps; nrow=5)
Example block output
Output type consistency

To obtain a singleton Vector containing a single heatmap for non-batched inputs, use the heatmap keyword argument unpack_singleton=false.

Processing heatmaps

Heatmapping makes use of the Julia-based image processing ecosystem Images.jl.

If you want to further process heatmaps, you may benefit from reading about some fundamental conventions that the ecosystem utilizes that are different from how images are typically represented in OpenCV, MATLAB, ImageJ or Python.

Saving heatmaps

Since heatmaps are regular Images.jl images, they can be saved as such:

using FileIO
+
+img = heatmap(input, analyzer)
+save("heatmap.png", img)

This page was generated using Literate.jl.

diff --git a/v0.8.1/index.html b/v0.8.1/index.html new file mode 100644 index 0000000..eb4c8b5 --- /dev/null +++ b/v0.8.1/index.html @@ -0,0 +1,2 @@ + +Home · ExplainableAI.jl
diff --git a/v0.8.1/literate/augmentations.jl b/v0.8.1/literate/augmentations.jl new file mode 100644 index 0000000..0b7438b --- /dev/null +++ b/v0.8.1/literate/augmentations.jl @@ -0,0 +1,84 @@ +# # [Analyzer augmentations](@id docs-augmentations) +# All analyzers implemented in ExplainableAI.jl can be augmented by two types of augmentations: +# [`NoiseAugmentation`](@ref)s and [`InterpolationAugmentation`](@ref)s. +# These augmentations are wrappers around analyzers +# that modify the input before passing it to the analyzer. +# +# We build on the basics shown in the [*Getting started*](@ref docs-getting-started) section +# and start out by loading the same pre-trained LeNet5 model and MNIST input data: +using ExplainableAI +using VisionHeatmaps +using Flux + +using BSON # hide +model = BSON.load("../model.bson", @__MODULE__)[:model] # hide +model +#- +using MLDatasets +using ImageCore, ImageIO, ImageShow + +index = 10 +x, y = MNIST(Float32, :test)[10] +input = reshape(x, 28, 28, 1, :) + +convert2image(MNIST, x) + +# ## Noise augmentation +# The [`NoiseAugmentation`](@ref) wrapper computes explanations averaged over noisy inputs. +# Let's demonstrate this on the [`Gradient`](@ref) analyzer. +# First, we compute the heatmap of an explanation without augmentation: +analyzer = Gradient(model) +heatmap(input, analyzer) + +# Now we wrap the analyzer in a [`NoiseAugmentation`](@ref) with 10 samples of noise. +# By default, the noise is sampled from a Gaussian distribution +# with mean 0 and standard deviation 1. +analyzer = NoiseAugmentation(Gradient(model), 50) +heatmap(input, analyzer) + +# Note that a higher sample size is desired, as it will lead to a smoother heatmap. +# However, this comes at the cost of a longer computation time. +# +# We can also set the standard deviation of the Gaussian distribution: +analyzer = NoiseAugmentation(Gradient(model), 50, 0.1) +heatmap(input, analyzer) + +# When used with a `Gradient` analyzer, this is equivalent to [`SmoothGrad`](@ref): +analyzer = SmoothGrad(model, 50) +heatmap(input, analyzer) + +# We can also use any distribution from +# [Distributions.jl](https://github.com/JuliaStats/Distributions.jl), +# for example Poisson noise with rate $\lambda=0.5$: +using Distributions + +analyzer = NoiseAugmentation(Gradient(model), 50, Poisson(0.5)) +heatmap(input, analyzer) + +# Is is also possible to define your own distributions or mixture distributions. +# +# `NoiseAugmentation` can be combined with any analyzer type from the Julia-XAI ecosystem, +# for example `LRP` from [RelevancePropagation.jl](https://github.com/Julia-XAI/RelevancePropagation.jl). + +# ## Integration augmentation +# The [`InterpolationAugmentation`](@ref) wrapper computes explanations +# averaged over `n` steps of linear interpolation between the input and a reference input, +# which is set to `zero(input)` by default: +analyzer = InterpolationAugmentation(Gradient(model), 50) +heatmap(input, analyzer) + +# When used with a `Gradient` analyzer, this is equivalent to [`IntegratedGradients`](@ref): +analyzer = IntegratedGradients(model, 50) +heatmap(input, analyzer) + +# To select a different reference input, pass it to the `analyze` function +# using the keyword argument `input_ref`. +# Note that this is an arbitrary example for the sake of demonstration. +matrix_of_ones = ones(Float32, size(input)) + +analyzer = InterpolationAugmentation(Gradient(model), 50) +expl = analyzer(input; input_ref=matrix_of_ones) +heatmap(expl) + +# Once again, `InterpolationAugmentation` can be combined with any analyzer type from the Julia-XAI ecosystem, +# for example `LRP` from [RelevancePropagation.jl](https://github.com/Julia-XAI/RelevancePropagation.jl). diff --git a/v0.8.1/literate/example.jl b/v0.8.1/literate/example.jl new file mode 100644 index 0000000..7efa543 --- /dev/null +++ b/v0.8.1/literate/example.jl @@ -0,0 +1,116 @@ +# # [Getting started](@id docs-getting-started) + +#md # !!! note +#md # This package is part of a wider [Julia XAI ecosystem](https://github.com/Julia-XAI). +#md # For an introduction to this ecosystem, please refer to the +#md # [Getting started guide](https://julia-xai.github.io/XAIDocs/). + +# For this first example, we already have loaded a pre-trained LeNet5 model +# to look at explanations on the MNIST dataset. +using ExplainableAI +using Flux + +using BSON # hide +model = BSON.load("../model.bson", @__MODULE__)[:model] # hide +model + +#md # !!! note "Supported models" +#md # +#md # ExplainableAI.jl can be used on any differentiable classifier. + +# ## Preparing the input data +# We use MLDatasets to load a single image from the MNIST dataset: +using MLDatasets +using ImageCore, ImageIO, ImageShow + +index = 10 +x, y = MNIST(Float32, :test)[10] + +convert2image(MNIST, x) + +# By convention in Flux.jl, this input needs to be resized to WHCN format +# by adding a color channel and batch dimensions. +input = reshape(x, 28, 28, 1, :); + +#md # !!! note "Input format" +#md # +#md # For any explanation of a model, ExplainableAI.jl assumes the batch dimension +#md # to come last in the input. +#md # +#md # For the purpose of heatmapping, the input is assumed to be in WHCN order +#md # (width, height, channels, batch), which is Flux.jl's convention. + +# ## Explanations +# We can now select an analyzer of our choice and call [`analyze`](@ref) +# to get an [`Explanation`](@ref): +analyzer = InputTimesGradient(model) +expl = analyze(input, analyzer); + +# The return value `expl` is of type [`Explanation`](@ref) and bundles the following data: +# * `expl.val`: numerical output of the analyzer, e.g. an attribution or gradient +# * `expl.output`: model output for the given analyzer input +# * `expl.output_selection`: index of the output used for the explanation +# * `expl.analyzer`: symbol corresponding the used analyzer, e.g. `:Gradient` or `:LRP` +# * `expl.heatmap`: symbol indicating a preset heatmapping style, +# e.g. `:attibution`, `:sensitivity` or `:cam` +# * `expl.extras`: optional named tuple that can be used by analyzers +# to return additional information. +# +# We used `InputTimesGradient`, so `expl.analyzer` is `:InputTimesGradient`. +expl.analyzer + +# By default, the explanation is computed for the maximally activated output neuron. +# Since our digit is a 9 and Julia's indexing is 1-based, +# the output neuron at index `10` of our trained model is maximally activated. + +# Finally, we obtain the result of the analyzer in form of an array. +expl.val + +# ## Heatmapping basics +# Since the array `expl.val` is not very informative at first sight, +# we can visualize `Explanation`s by computing a `heatmap` using either +# [VisionHeatmaps.jl](https://julia-xai.github.io/XAIDocs/VisionHeatmaps/stable/) or +# [TextHeatmaps.jl](https://julia-xai.github.io/XAIDocs/TextHeatmaps/stable/). +using VisionHeatmaps + +heatmap(expl) + +# If we are only interested in the heatmap, we can combine analysis and heatmapping +# into a single function call: +heatmap(input, analyzer) + +# For a more detailed explanation of the `heatmap` function, +# refer to the [heatmapping section](@ref docs-heatmapping). + +# ## [List of analyzers](@id docs-analyzers-list) + +# ## Neuron selection +# By passing an additional index to our call to [`analyze`](@ref), +# we can compute an explanation with respect to a specific output neuron. +# Let's see why the output wasn't interpreted as a 4 (output neuron at index 5) +expl = analyze(input, analyzer, 5) +heatmap(expl) + +# This heatmap shows us that the "upper loop" of the hand-drawn 9 has negative relevance +# with respect to the output neuron corresponding to digit 4! + +#md # !!! note +#md # +#md # The output neuron can also be specified when calling `heatmap`: +#md # ```julia +#md # heatmap(input, analyzer, 5) +#md # ``` + +# ## Analyzing batches +# ExplainableAI also supports explanations of input batches: +batchsize = 20 +xs, _ = MNIST(Float32, :test)[1:batchsize] +batch = reshape(xs, 28, 28, 1, :) # reshape to WHCN format +expl = analyze(batch, analyzer); + +# This will return a single `Explanation` `expl` for the entire batch. +# Calling `heatmap` on `expl` will detect the batch dimension and return a vector of heatmaps. +heatmap(expl) + +# For more information on heatmapping batches, +# refer to the [heatmapping documentation](@ref docs-heatmapping-batches). diff --git a/v0.8.1/literate/heatmapping.jl b/v0.8.1/literate/heatmapping.jl new file mode 100644 index 0000000..9289dff --- /dev/null +++ b/v0.8.1/literate/heatmapping.jl @@ -0,0 +1,160 @@ +# # [Heatmapping](@id docs-heatmapping) +# Since numerical explanations are not very informative at first sight, +# we can visualize them by computing a `heatmap`, using either +# [VisionHeatmaps.jl](https://julia-xai.github.io/XAIDocs/VisionHeatmaps/stable/) or +# [TextHeatmaps.jl](https://julia-xai.github.io/XAIDocs/TextHeatmaps/stable/). +# +# This page showcases different options and preset for heatmapping, +# building on the basics shown in the [*Getting started*](@ref docs-getting-started) section. +# +# We start out by loading the same pre-trained LeNet5 model and MNIST input data: +using ExplainableAI +using VisionHeatmaps +using Flux + +using BSON # hide +model = BSON.load("../model.bson", @__MODULE__)[:model] # hide +model +#- +using MLDatasets +using ImageCore, ImageIO, ImageShow + +index = 10 +x, y = MNIST(Float32, :test)[10] +input = reshape(x, 28, 28, 1, :) + +img = convert2image(MNIST, x) + +# ## Automatic heatmap presets +# The function `heatmap` automatically applies common presets for each method. +# +# Since [`InputTimesGradient`](@ref) computes attributions, +# heatmaps are shown in a blue-white-red color scheme. +# Gradient methods however are typically shown in grayscale: +analyzer = Gradient(model) +heatmap(input, analyzer) +#- +analyzer = InputTimesGradient(model) +heatmap(input, analyzer) + +# ## Custom heatmap settings +# ### Color schemes +# We can partially or fully override presets by passing keyword arguments to `heatmap`. +# For example, we can use a custom color scheme from ColorSchemes.jl using the keyword argument `colorscheme`: +using ColorSchemes + +expl = analyze(input, analyzer) +heatmap(expl; colorscheme=:jet) +#- +heatmap(expl; colorscheme=:inferno) + +# Refer to the [ColorSchemes.jl catalogue](https://juliagraphics.github.io/ColorSchemes.jl/stable/basics/) +# for a gallery of available color schemes. + +# ### [Color channel reduction](@id docs-heatmap-reduce) +# Explanations have the same dimensionality as the inputs to the classifier. +# For images with multiple color channels, +# this means that the explanation also has a "color channel" dimension. +# +# The keyword argument `reduce` can be used to reduce this dimension +# to a single scalar value for each pixel. +# The following presets are available: +# - `:sum`: sum up color channels (default setting) +# - `:norm`: compute 2-norm over the color channels +# - `:maxabs`: compute `maximum(abs, x)` over the color channels + +heatmap(expl; reduce=:sum) +#- +heatmap(expl; reduce=:norm) +#- +heatmap(expl; reduce=:maxabs) + +# In this example, the heatmaps look identical. +# Since MNIST only has a single color channel, there is no need for color channel reduction. + +# ### [Mapping explanations onto the color scheme](@id docs-heatmap-rangescale) +# To map a [color-channel-reduced](@ref docs-heatmap-reduce) explanation onto a color scheme, +# we first need to normalize all values to the range $[0, 1]$. +# +# For this purpose, two presets are available through the `rangescale` keyword argument: +# - `:extrema`: normalize to the minimum and maximum value of the explanation +# - `:centered`: normalize to the maximum absolute value of the explanation. +# Values of zero will be mapped to the center of the color scheme. +# +# Depending on the color scheme, one of these presets may be more suitable than the other. +# The default color scheme for `InputTimesGradient`, `seismic`, is centered around zero, +# making `:centered` a good choice: +heatmap(expl; rangescale=:centered) +#- +heatmap(expl; rangescale=:extrema) +# However, for the `inferno` color scheme, which is not centered around zero, +# `:extrema` leads to a heatmap with higher contrast. +heatmap(expl; rangescale=:centered, colorscheme=:inferno) +#- +heatmap(expl; rangescale=:extrema, colorscheme=:inferno) + +# For the full list of `heatmap` keyword arguments, refer to the `heatmap` documentation. + +# ## [Heatmap overlays](@id overlay) +# Heatmaps can be overlaid onto the input image using the `heatmap_overlay` function +# from VisionHeatmaps.jl. +# This can be useful for visualizing the relevance of specific regions of the input: +heatmap_overlay(expl, img) + +# The alpha value of the heatmap can be adjusted using the `alpha` keyword argument: +heatmap_overlay(expl, img; alpha=0.3) + +# All previously discussed keyword arguments for `heatmap` can also be used with `heatmap_overlay`: +heatmap_overlay(expl, img; alpha=0.7, colorscheme=:inferno, rangescale=:extrema) + +# ## [Heatmapping batches](@id docs-heatmapping-batches) +# Heatmapping also works with input batches. +# Let's demonstrate this by using a batch of 25 images from the MNIST dataset: +xs, ys = MNIST(Float32, :test)[1:25] +batch = reshape(xs, 28, 28, 1, :); # reshape to WHCN format + +# The `heatmap` function automatically recognizes +# that the explanation is batched and returns a `Vector` of images: +heatmaps = heatmap(batch, analyzer) + +# Image.jl's `mosaic` function can used to display them in a grid: +mosaic(heatmaps; nrow=5) + +# When heatmapping batches, the mapping to the color scheme is applied per sample. +# For example, `rangescale=:extrema` will normalize each heatmap +# to the minimum and maximum value of each sample in the batch. +# This ensures that heatmaps don't depend on other samples in the batch. +# +# If this bevahior is not desired, +# `heatmap` can be called with the keyword-argument `process_batch=true`: +expl = analyze(batch, analyzer) +heatmaps = heatmap(expl; process_batch=true) +mosaic(heatmaps; nrow=5) + +# This can be useful when comparing heatmaps for fixed output neurons: +expl = analyze(batch, analyzer, 7) # explain digit "6" +heatmaps = heatmap(expl; process_batch=true) +mosaic(heatmaps; nrow=5) + +#md # !!! note "Output type consistency" +#md # +#md # To obtain a singleton `Vector` containing a single heatmap for non-batched inputs, +#md # use the `heatmap` keyword argument `unpack_singleton=false`. + +# ## Processing heatmaps +# Heatmapping makes use of the +# [Julia-based image processing ecosystem Images.jl](https://github.com/JuliaImages). +# +# If you want to further process heatmaps, you may benefit from reading about some +# [fundamental conventions](https://juliaimages.org/latest/tutorials/quickstart/) +# that the ecosystem utilizes that are different from how images are typically represented +# in OpenCV, MATLAB, ImageJ or Python. + +# ## Saving heatmaps +# Since heatmaps are regular Images.jl images, they can be saved as such: +# ```julia +# using FileIO +# +# img = heatmap(input, analyzer) +# save("heatmap.png", img) +# ``` diff --git a/v0.8.1/model.bson b/v0.8.1/model.bson new file mode 100644 index 0000000..151a832 Binary files /dev/null and b/v0.8.1/model.bson differ diff --git a/v0.8.1/objects.inv b/v0.8.1/objects.inv new file mode 100644 index 0000000..56cfcfb --- /dev/null +++ b/v0.8.1/objects.inv @@ -0,0 +1,7 @@ +# Sphinx inventory version 2 +# Project: ExplainableAI.jl +# Version: 0.8.1 +# The remainder of this file is compressed using zlib. +xUn0+W575(bu4=ֲ$H*]R*9Jܙ}pf٨ +O%8_#ZXG#1 yw}jK `Lw:Ñp@[QyVn% Y2OI=ZT%g, &ar/_}ה"HBvP{hGOCnZtjӡyhJ8/d{cOZeAt>BX@RB2bxaOq( F+!T؏(I,6w2"`屶1si<T s)cU*Q!Nu%Xђ %e,.*jď*wm,P9v"@;|,] wChRKm#2LBwI)Υ_ |f}"yDB}Ҿ.A"}_7_램 eکxj%d azG {OLC]&tE + rBʙ!:A/~T|P=[* O|гwBȾU|/G!^h-9=0V!Yeąd/4QܪNv \ No newline at end of file diff --git a/v0.8.1/search_index.js b/v0.8.1/search_index.js new file mode 100644 index 0000000..6cbedfb --- /dev/null +++ b/v0.8.1/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"api/#Basic-API","page":"API Reference","title":"Basic API","text":"","category":"section"},{"location":"api/","page":"API Reference","title":"API Reference","text":"All methods in ExplainableAI.jl work by calling analyze on an input and an analyzer:","category":"page"},{"location":"api/","page":"API Reference","title":"API Reference","text":"analyze\nExplanation","category":"page"},{"location":"api/#XAIBase.analyze","page":"API Reference","title":"XAIBase.analyze","text":"analyze(input, method)\nanalyze(input, method, output_selection)\n\nApply the analyzer method for the given input, returning an Explanation. If output_selection is specified, the explanation will be calculated for that output. Otherwise, the output with the highest activation is automatically chosen.\n\nSee also Explanation.\n\nKeyword arguments\n\nadd_batch_dim: add batch dimension to the input without allocating. Default is false.\n\n\n\n\n\n","category":"function"},{"location":"api/#XAIBase.Explanation","page":"API Reference","title":"XAIBase.Explanation","text":"Explanation(val, output, output_selection, analyzer, heatmap, extras)\n\nReturn type of analyzers when calling analyze.\n\nFields\n\nval: numerical output of the analyzer, e.g. an attribution or gradient\noutput: model output for the given analyzer input\noutput_selection: index of the output used for the explanation\nanalyzer: symbol corresponding the used analyzer, e.g. :Gradient or :LRP\nheatmap: symbol indicating a preset heatmapping style, e.g. :attribution, :sensitivity or :cam\nextras: optional named tuple that can be used by analyzers to return additional information.\n\n\n\n\n\n","category":"type"},{"location":"api/","page":"API Reference","title":"API Reference","text":"For heatmapping functionality, take a look at either VisionHeatmaps.jl or TextHeatmaps.jl. Both provide heatmap methods for visualizing explanations, either for images or text, respectively.","category":"page"},{"location":"api/#Analyzers","page":"API Reference","title":"Analyzers","text":"","category":"section"},{"location":"api/","page":"API Reference","title":"API Reference","text":"Gradient\nInputTimesGradient\nSmoothGrad\nIntegratedGradients\nGradCAM","category":"page"},{"location":"api/#ExplainableAI.Gradient","page":"API Reference","title":"ExplainableAI.Gradient","text":"Gradient(model)\n\nAnalyze model by calculating the gradient of a neuron activation with respect to the input.\n\n\n\n\n\n","category":"type"},{"location":"api/#ExplainableAI.InputTimesGradient","page":"API Reference","title":"ExplainableAI.InputTimesGradient","text":"InputTimesGradient(model)\n\nAnalyze model by calculating the gradient of a neuron activation with respect to the input. This gradient is then multiplied element-wise with the input.\n\n\n\n\n\n","category":"type"},{"location":"api/#ExplainableAI.SmoothGrad","page":"API Reference","title":"ExplainableAI.SmoothGrad","text":"SmoothGrad(analyzer, [n=50, std=0.1, rng=GLOBAL_RNG])\nSmoothGrad(analyzer, [n=50, distribution=Normal(0, σ²=0.01), rng=GLOBAL_RNG])\n\nAnalyze model by calculating a smoothed sensitivity map. This is done by averaging sensitivity maps of a Gradient analyzer over random samples in a neighborhood of the input, typically by adding Gaussian noise with mean 0.\n\nReferences\n\nSmilkov et al., SmoothGrad: removing noise by adding noise\n\n\n\n\n\n","category":"function"},{"location":"api/#ExplainableAI.IntegratedGradients","page":"API Reference","title":"ExplainableAI.IntegratedGradients","text":"IntegratedGradients(analyzer, [n=50])\nIntegratedGradients(analyzer, [n=50])\n\nAnalyze model by using the Integrated Gradients method.\n\nReferences\n\nSundararajan et al., Axiomatic Attribution for Deep Networks\n\n\n\n\n\n","category":"function"},{"location":"api/#ExplainableAI.GradCAM","page":"API Reference","title":"ExplainableAI.GradCAM","text":"GradCAM(feature_layers, adaptation_layers)\n\nCalculates the Gradient-weighted Class Activation Map (GradCAM). GradCAM provides a visual explanation of the regions with significant neuron importance for the model's classification decision.\n\nParameters\n\nfeature_layers: The layers of a convolutional neural network (CNN) responsible for extracting feature maps.\nadaptation_layers: The layers of the CNN used for adaptation and classification.\n\nNote\n\nFlux is not required for GradCAM. GradCAM is compatible with a wide variety of CNN model-families.\n\nReferences\n\nSelvaraju et al., Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization\n\n\n\n\n\n","category":"type"},{"location":"api/#Input-augmentations","page":"API Reference","title":"Input augmentations","text":"","category":"section"},{"location":"api/","page":"API Reference","title":"API Reference","text":"SmoothGrad and IntegratedGradients are special cases of the input augmentations NoiseAugmentation and InterpolationAugmentation, which can be applied as a wrapper to any analyzer:","category":"page"},{"location":"api/","page":"API Reference","title":"API Reference","text":"NoiseAugmentation\nInterpolationAugmentation","category":"page"},{"location":"api/#ExplainableAI.NoiseAugmentation","page":"API Reference","title":"ExplainableAI.NoiseAugmentation","text":"NoiseAugmentation(analyzer, n, [std=1, rng=GLOBAL_RNG])\nNoiseAugmentation(analyzer, n, distribution, [rng=GLOBAL_RNG])\n\nA wrapper around analyzers that augments the input with n samples of additive noise sampled from distribution. This input augmentation is then averaged to return an Explanation.\n\n\n\n\n\n","category":"type"},{"location":"api/#ExplainableAI.InterpolationAugmentation","page":"API Reference","title":"ExplainableAI.InterpolationAugmentation","text":"InterpolationAugmentation(model, [n=50])\n\nA wrapper around analyzers that augments the input with n steps of linear interpolation between the input and a reference input (typically zero(input)). The gradients w.r.t. this augmented input are then averaged and multiplied with the difference between the input and the reference input.\n\n\n\n\n\n","category":"type"},{"location":"api/#Index","page":"API Reference","title":"Index","text":"","category":"section"},{"location":"api/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"EditURL = \"../literate/heatmapping.jl\"","category":"page"},{"location":"generated/heatmapping/#docs-heatmapping","page":"Heatmapping","title":"Heatmapping","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Since numerical explanations are not very informative at first sight, we can visualize them by computing a heatmap, using either VisionHeatmaps.jl or TextHeatmaps.jl.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"This page showcases different options and preset for heatmapping, building on the basics shown in the Getting started section.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"We start out by loading the same pre-trained LeNet5 model and MNIST input data:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"using ExplainableAI\nusing VisionHeatmaps\nusing Flux\n\nusing BSON # hide\nmodel = BSON.load(\"../model.bson\", @__MODULE__)[:model] # hide\nmodel","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"using MLDatasets\nusing ImageCore, ImageIO, ImageShow\n\nindex = 10\nx, y = MNIST(Float32, :test)[10]\ninput = reshape(x, 28, 28, 1, :)\n\nimg = convert2image(MNIST, x)","category":"page"},{"location":"generated/heatmapping/#Automatic-heatmap-presets","page":"Heatmapping","title":"Automatic heatmap presets","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"The function heatmap automatically applies common presets for each method.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Since InputTimesGradient computes attributions, heatmaps are shown in a blue-white-red color scheme. Gradient methods however are typically shown in grayscale:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"analyzer = Gradient(model)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"analyzer = InputTimesGradient(model)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/heatmapping/#Custom-heatmap-settings","page":"Heatmapping","title":"Custom heatmap settings","text":"","category":"section"},{"location":"generated/heatmapping/#Color-schemes","page":"Heatmapping","title":"Color schemes","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"We can partially or fully override presets by passing keyword arguments to heatmap. For example, we can use a custom color scheme from ColorSchemes.jl using the keyword argument colorscheme:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"using ColorSchemes\n\nexpl = analyze(input, analyzer)\nheatmap(expl; colorscheme=:jet)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; colorscheme=:inferno)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Refer to the ColorSchemes.jl catalogue for a gallery of available color schemes.","category":"page"},{"location":"generated/heatmapping/#docs-heatmap-reduce","page":"Heatmapping","title":"Color channel reduction","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Explanations have the same dimensionality as the inputs to the classifier. For images with multiple color channels, this means that the explanation also has a \"color channel\" dimension.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"The keyword argument reduce can be used to reduce this dimension to a single scalar value for each pixel. The following presets are available:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":":sum: sum up color channels (default setting)\n:norm: compute 2-norm over the color channels\n:maxabs: compute maximum(abs, x) over the color channels","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; reduce=:sum)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; reduce=:norm)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; reduce=:maxabs)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"In this example, the heatmaps look identical. Since MNIST only has a single color channel, there is no need for color channel reduction.","category":"page"},{"location":"generated/heatmapping/#docs-heatmap-rangescale","page":"Heatmapping","title":"Mapping explanations onto the color scheme","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"To map a color-channel-reduced explanation onto a color scheme, we first need to normalize all values to the range 0 1.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"For this purpose, two presets are available through the rangescale keyword argument:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":":extrema: normalize to the minimum and maximum value of the explanation\n:centered: normalize to the maximum absolute value of the explanation. Values of zero will be mapped to the center of the color scheme.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Depending on the color scheme, one of these presets may be more suitable than the other. The default color scheme for InputTimesGradient, seismic, is centered around zero, making :centered a good choice:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; rangescale=:centered)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; rangescale=:extrema)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"However, for the inferno color scheme, which is not centered around zero, :extrema leads to a heatmap with higher contrast.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; rangescale=:centered, colorscheme=:inferno)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap(expl; rangescale=:extrema, colorscheme=:inferno)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"For the full list of heatmap keyword arguments, refer to the heatmap documentation.","category":"page"},{"location":"generated/heatmapping/#overlay","page":"Heatmapping","title":"Heatmap overlays","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Heatmaps can be overlaid onto the input image using the heatmap_overlay function from VisionHeatmaps.jl. This can be useful for visualizing the relevance of specific regions of the input:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap_overlay(expl, img)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"The alpha value of the heatmap can be adjusted using the alpha keyword argument:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap_overlay(expl, img; alpha=0.3)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"All previously discussed keyword arguments for heatmap can also be used with heatmap_overlay:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmap_overlay(expl, img; alpha=0.7, colorscheme=:inferno, rangescale=:extrema)","category":"page"},{"location":"generated/heatmapping/#docs-heatmapping-batches","page":"Heatmapping","title":"Heatmapping batches","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Heatmapping also works with input batches. Let's demonstrate this by using a batch of 25 images from the MNIST dataset:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"xs, ys = MNIST(Float32, :test)[1:25]\nbatch = reshape(xs, 28, 28, 1, :); # reshape to WHCN format\nnothing #hide","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"The heatmap function automatically recognizes that the explanation is batched and returns a Vector of images:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"heatmaps = heatmap(batch, analyzer)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Image.jl's mosaic function can used to display them in a grid:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"mosaic(heatmaps; nrow=5)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"When heatmapping batches, the mapping to the color scheme is applied per sample. For example, rangescale=:extrema will normalize each heatmap to the minimum and maximum value of each sample in the batch. This ensures that heatmaps don't depend on other samples in the batch.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"If this bevahior is not desired, heatmap can be called with the keyword-argument process_batch=true:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"expl = analyze(batch, analyzer)\nheatmaps = heatmap(expl; process_batch=true)\nmosaic(heatmaps; nrow=5)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"This can be useful when comparing heatmaps for fixed output neurons:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"expl = analyze(batch, analyzer, 7) # explain digit \"6\"\nheatmaps = heatmap(expl; process_batch=true)\nmosaic(heatmaps; nrow=5)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"note: Output type consistency\nTo obtain a singleton Vector containing a single heatmap for non-batched inputs, use the heatmap keyword argument unpack_singleton=false.","category":"page"},{"location":"generated/heatmapping/#Processing-heatmaps","page":"Heatmapping","title":"Processing heatmaps","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Heatmapping makes use of the Julia-based image processing ecosystem Images.jl.","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"If you want to further process heatmaps, you may benefit from reading about some fundamental conventions that the ecosystem utilizes that are different from how images are typically represented in OpenCV, MATLAB, ImageJ or Python.","category":"page"},{"location":"generated/heatmapping/#Saving-heatmaps","page":"Heatmapping","title":"Saving heatmaps","text":"","category":"section"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"Since heatmaps are regular Images.jl images, they can be saved as such:","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"using FileIO\n\nimg = heatmap(input, analyzer)\nsave(\"heatmap.png\", img)","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"","category":"page"},{"location":"generated/heatmapping/","page":"Heatmapping","title":"Heatmapping","text":"This page was generated using Literate.jl.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"EditURL = \"../literate/augmentations.jl\"","category":"page"},{"location":"generated/augmentations/#docs-augmentations","page":"Input augmentations","title":"Analyzer augmentations","text":"","category":"section"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"All analyzers implemented in ExplainableAI.jl can be augmented by two types of augmentations: NoiseAugmentations and InterpolationAugmentations. These augmentations are wrappers around analyzers that modify the input before passing it to the analyzer.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"We build on the basics shown in the Getting started section and start out by loading the same pre-trained LeNet5 model and MNIST input data:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"using ExplainableAI\nusing VisionHeatmaps\nusing Flux\n\nusing BSON # hide\nmodel = BSON.load(\"../model.bson\", @__MODULE__)[:model] # hide\nmodel","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"using MLDatasets\nusing ImageCore, ImageIO, ImageShow\n\nindex = 10\nx, y = MNIST(Float32, :test)[10]\ninput = reshape(x, 28, 28, 1, :)\n\nconvert2image(MNIST, x)","category":"page"},{"location":"generated/augmentations/#Noise-augmentation","page":"Input augmentations","title":"Noise augmentation","text":"","category":"section"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"The NoiseAugmentation wrapper computes explanations averaged over noisy inputs. Let's demonstrate this on the Gradient analyzer. First, we compute the heatmap of an explanation without augmentation:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"analyzer = Gradient(model)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"Now we wrap the analyzer in a NoiseAugmentation with 10 samples of noise. By default, the noise is sampled from a Gaussian distribution with mean 0 and standard deviation 1.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"analyzer = NoiseAugmentation(Gradient(model), 50)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"Note that a higher sample size is desired, as it will lead to a smoother heatmap. However, this comes at the cost of a longer computation time.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"We can also set the standard deviation of the Gaussian distribution:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"analyzer = NoiseAugmentation(Gradient(model), 50, 0.1)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"When used with a Gradient analyzer, this is equivalent to SmoothGrad:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"analyzer = SmoothGrad(model, 50)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"We can also use any distribution from Distributions.jl, for example Poisson noise with rate lambda=05:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"using Distributions\n\nanalyzer = NoiseAugmentation(Gradient(model), 50, Poisson(0.5))\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"Is is also possible to define your own distributions or mixture distributions.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"NoiseAugmentation can be combined with any analyzer type from the Julia-XAI ecosystem, for example LRP from RelevancePropagation.jl.","category":"page"},{"location":"generated/augmentations/#Integration-augmentation","page":"Input augmentations","title":"Integration augmentation","text":"","category":"section"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"The InterpolationAugmentation wrapper computes explanations averaged over n steps of linear interpolation between the input and a reference input, which is set to zero(input) by default:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"analyzer = InterpolationAugmentation(Gradient(model), 50)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"When used with a Gradient analyzer, this is equivalent to IntegratedGradients:","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"analyzer = IntegratedGradients(model, 50)\nheatmap(input, analyzer)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"To select a different reference input, pass it to the analyze function using the keyword argument input_ref. Note that this is an arbitrary example for the sake of demonstration.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"matrix_of_ones = ones(Float32, size(input))\n\nanalyzer = InterpolationAugmentation(Gradient(model), 50)\nexpl = analyzer(input; input_ref=matrix_of_ones)\nheatmap(expl)","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"Once again, InterpolationAugmentation can be combined with any analyzer type from the Julia-XAI ecosystem, for example LRP from RelevancePropagation.jl.","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"","category":"page"},{"location":"generated/augmentations/","page":"Input augmentations","title":"Input augmentations","text":"This page was generated using Literate.jl.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"EditURL = \"../literate/example.jl\"","category":"page"},{"location":"generated/example/#docs-getting-started","page":"Getting started","title":"Getting started","text":"","category":"section"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"note: Note\nThis package is part of a wider Julia XAI ecosystem. For an introduction to this ecosystem, please refer to the Getting started guide.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"For this first example, we already have loaded a pre-trained LeNet5 model to look at explanations on the MNIST dataset.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"using ExplainableAI\nusing Flux\n\nusing BSON # hide\nmodel = BSON.load(\"../model.bson\", @__MODULE__)[:model] # hide\nmodel","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"note: Supported models\nExplainableAI.jl can be used on any differentiable classifier.","category":"page"},{"location":"generated/example/#Preparing-the-input-data","page":"Getting started","title":"Preparing the input data","text":"","category":"section"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"We use MLDatasets to load a single image from the MNIST dataset:","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"using MLDatasets\nusing ImageCore, ImageIO, ImageShow\n\nindex = 10\nx, y = MNIST(Float32, :test)[10]\n\nconvert2image(MNIST, x)","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"By convention in Flux.jl, this input needs to be resized to WHCN format by adding a color channel and batch dimensions.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"input = reshape(x, 28, 28, 1, :);\nnothing #hide","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"note: Input format\nFor any explanation of a model, ExplainableAI.jl assumes the batch dimension to come last in the input.For the purpose of heatmapping, the input is assumed to be in WHCN order (width, height, channels, batch), which is Flux.jl's convention.","category":"page"},{"location":"generated/example/#Explanations","page":"Getting started","title":"Explanations","text":"","category":"section"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"We can now select an analyzer of our choice and call analyze to get an Explanation:","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"analyzer = InputTimesGradient(model)\nexpl = analyze(input, analyzer);\nnothing #hide","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"The return value expl is of type Explanation and bundles the following data:","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"expl.val: numerical output of the analyzer, e.g. an attribution or gradient\nexpl.output: model output for the given analyzer input\nexpl.output_selection: index of the output used for the explanation\nexpl.analyzer: symbol corresponding the used analyzer, e.g. :Gradient or :LRP\nexpl.heatmap: symbol indicating a preset heatmapping style, e.g. :attibution, :sensitivity or :cam\nexpl.extras: optional named tuple that can be used by analyzers to return additional information.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"We used InputTimesGradient, so expl.analyzer is :InputTimesGradient.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"expl.analyzer","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"By default, the explanation is computed for the maximally activated output neuron. Since our digit is a 9 and Julia's indexing is 1-based, the output neuron at index 10 of our trained model is maximally activated.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"Finally, we obtain the result of the analyzer in form of an array.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"expl.val","category":"page"},{"location":"generated/example/#Heatmapping-basics","page":"Getting started","title":"Heatmapping basics","text":"","category":"section"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"Since the array expl.val is not very informative at first sight, we can visualize Explanations by computing a heatmap using either VisionHeatmaps.jl or TextHeatmaps.jl.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"using VisionHeatmaps\n\nheatmap(expl)","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"If we are only interested in the heatmap, we can combine analysis and heatmapping into a single function call:","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"heatmap(input, analyzer)","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"For a more detailed explanation of the heatmap function, refer to the heatmapping section.","category":"page"},{"location":"generated/example/#docs-analyzers-list","page":"Getting started","title":"List of analyzers","text":"","category":"section"},{"location":"generated/example/#Neuron-selection","page":"Getting started","title":"Neuron selection","text":"","category":"section"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"By passing an additional index to our call to analyze, we can compute an explanation with respect to a specific output neuron. Let's see why the output wasn't interpreted as a 4 (output neuron at index 5)","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"expl = analyze(input, analyzer, 5)\nheatmap(expl)","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"This heatmap shows us that the \"upper loop\" of the hand-drawn 9 has negative relevance with respect to the output neuron corresponding to digit 4!","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"note: Note\nThe output neuron can also be specified when calling heatmap:heatmap(input, analyzer, 5)","category":"page"},{"location":"generated/example/#Analyzing-batches","page":"Getting started","title":"Analyzing batches","text":"","category":"section"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"ExplainableAI also supports explanations of input batches:","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"batchsize = 20\nxs, _ = MNIST(Float32, :test)[1:batchsize]\nbatch = reshape(xs, 28, 28, 1, :) # reshape to WHCN format\nexpl = analyze(batch, analyzer);\nnothing #hide","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"This will return a single Explanation expl for the entire batch. Calling heatmap on expl will detect the batch dimension and return a vector of heatmaps.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"heatmap(expl)","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"For more information on heatmapping batches, refer to the heatmapping documentation.","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"","category":"page"},{"location":"generated/example/","page":"Getting started","title":"Getting started","text":"This page was generated using Literate.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = ExplainableAI","category":"page"},{"location":"#ExplainableAI.jl","page":"Home","title":"ExplainableAI.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Explainable AI methods in Julia.","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Note\nThis package is part of a wider Julia XAI ecosystem. For an introduction to this ecosystem, please refer to the Getting started guide.","category":"page"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"To install this package and its dependencies, open the Julia REPL and run ","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> ]add ExplainableAI","category":"page"},{"location":"#Manual","page":"Home","title":"Manual","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\n \"generated/example.md\",\n \"generated/heatmapping.md\",\n \"generated/augmentations.md\",\n]\nDepth = 3","category":"page"},{"location":"#API-reference","page":"Home","title":"API reference","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Pages = [\"api.md\"]\nDepth = 2","category":"page"}] +} diff --git a/v0.8.1/siteinfo.js b/v0.8.1/siteinfo.js new file mode 100644 index 0000000..a6be1ae --- /dev/null +++ b/v0.8.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.8.1"; diff --git a/versions.js b/versions.js index d3286ce..2c26679 100644 --- a/versions.js +++ b/versions.js @@ -9,5 +9,5 @@ var DOC_VERSIONS = [ "v0.2", "dev", ]; -var DOCUMENTER_NEWEST = "v0.8.0"; +var DOCUMENTER_NEWEST = "v0.8.1"; var DOCUMENTER_STABLE = "stable";