From 19704daf040e1c4bc3b6fc6d54e35679a4006a3b Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Tue, 12 Nov 2024 14:58:16 +0000 Subject: [PATCH] build based on 538b9b1 --- previews/PR441/assets/documenter.js | 264 + previews/PR441/assets/search.js | 251 + .../PR441/assets/themes/documenter-dark.css | 7642 + .../PR441/assets/themes/documenter-light.css | 7630 + previews/PR441/assets/themeswap.js | 66 + previews/PR441/considerations/index.html | 20 + previews/PR441/datasets/index.html | 35 + previews/PR441/features/index.html | 16 + previews/PR441/geometries/index.html | 44 + previews/PR441/images/index.html | 117714 +++++++++++++++ previews/PR441/index.html | 2 + previews/PR441/memory/index.html | 47 + previews/PR441/projections/index.html | 787 + previews/PR441/quickstart/index.html | 89 + previews/PR441/rasters/index.html | 81 + previews/PR441/reference/index.html | 128 + previews/PR441/search/index.html | 2 + previews/PR441/search_index.js | 3 + previews/PR441/siteinfo.js | 1 + previews/PR441/spatialite/index.html | 132 + previews/PR441/tables/index.html | 6 + 21 files changed, 134960 insertions(+) create mode 100644 previews/PR441/assets/documenter.js create mode 100644 previews/PR441/assets/search.js create mode 100644 previews/PR441/assets/themes/documenter-dark.css create mode 100644 previews/PR441/assets/themes/documenter-light.css create mode 100644 previews/PR441/assets/themeswap.js create mode 100644 previews/PR441/considerations/index.html create mode 100644 previews/PR441/datasets/index.html create mode 100644 previews/PR441/features/index.html create mode 100644 previews/PR441/geometries/index.html create mode 100644 previews/PR441/images/index.html create mode 100644 previews/PR441/index.html create mode 100644 previews/PR441/memory/index.html create mode 100644 previews/PR441/projections/index.html create mode 100644 previews/PR441/quickstart/index.html create mode 100644 previews/PR441/rasters/index.html create mode 100644 previews/PR441/reference/index.html create mode 100644 previews/PR441/search/index.html create mode 100644 previews/PR441/search_index.js create mode 100644 previews/PR441/siteinfo.js create mode 100644 previews/PR441/spatialite/index.html create mode 100644 previews/PR441/tables/index.html diff --git a/previews/PR441/assets/documenter.js b/previews/PR441/assets/documenter.js new file mode 100644 index 00000000..15dc682b --- /dev/null +++ b/previews/PR441/assets/documenter.js @@ -0,0 +1,264 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.10.3/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.10.3/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) { +$(document).ready(function() { + hljs.initHighlighting(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function() { + var settings = $('#documenter-settings'); + $('#documenter-settings-button').click(function(){ + settings.toggleClass('is-active'); + }); + // Close the dialog if X is clicked + $('#documenter-settings button.delete').click(function(){ + settings.removeClass('is-active'); + }); + // Close dialog if ESC is pressed + $(document).keyup(function(e) { + if (e.keyCode == 27) settings.removeClass('is-active'); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function() { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button") + sidebar_button.click(function(ev) { + ev.preventDefault(); + sidebar.toggleClass('visible'); + if (sidebar.hasClass('visible')) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind('click', function(ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + }); +}) + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function() { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css('max-width'), 10); + var L0 = e.width(); + if(L0 > L) { + var h0 = parseInt(e.css('font-size'), 10); + e.css('font-size', L * h0 / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on('orientationchange', resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function() { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if(typeof active !== 'undefined') { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +function set_theme(theme) { + var active = null; + var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + var themename = ss.ownerNode.getAttribute("data-theme-name"); + if(themename === null) continue; // ignore non-theme stylesheets + // Find the active theme + if(themename === theme) active = ss; + else disabled.push(ss); + } + if(active !== null) { + active.disabled = false; + if(active.ownerNode.getAttribute("data-theme-primary") === null) { + document.getElementsByTagName('html')[0].className = "theme--" + theme; + } else { + document.getElementsByTagName('html')[0].className = ""; + } + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + + // Store the theme in localStorage + if(typeof(window.localStorage) !== "undefined") { + window.localStorage.setItem("documenter-theme", theme); + } else { + console.error("Browser does not support window.localStorage"); + } +} + +// Theme picker setup +$(document).ready(function() { + // onchange callback + $('#documenter-themepicker').change(function themepick_callback(ev){ + var themename = $('#documenter-themepicker option:selected').attr('value'); + set_theme(themename); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if(typeof(window.localStorage) !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if(theme !== null) { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = (e.value === theme); + }) + } else { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = $("html").hasClass(`theme--${e.value}`); + }) + } + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function() { + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR441/assets/search.js b/previews/PR441/assets/search.js new file mode 100644 index 00000000..71ebd87e --- /dev/null +++ b/previews/PR441/assets/search.js @@ -0,0 +1,251 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.6/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min', + } +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'lunr', 'lodash'], function($, lunr, _) { + +$(document).ready(function() { + // parseUri 1.2.2 + // (c) Steven Levithan + // MIT License + function parseUri (str) { + var o = parseUri.options, + m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), + uri = {}, + i = 14; + + while (i--) uri[o.key[i]] = m[i] || ""; + + uri[o.q.name] = {}; + uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { + if ($1) uri[o.q.name][$1] = $2; + }); + + return uri; + }; + parseUri.options = { + strictMode: false, + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], + q: { + name: "queryKey", + parser: /(?:^|&)([^&=]*)=?([^&]*)/g + }, + parser: { + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + } + }; + + $("#search-form").submit(function(e) { + e.preventDefault() + }) + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'does', + 'either', + 'ever', + 'every', + 'from', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'into', + 'it', + 'its', + 'just', + 'least', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'who', + 'whom', + 'why', + 'will', + 'would', + 'yet', + 'you', + 'your' + ]) + + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" + // would not find anything if searching for "add!", only for the entire qualification + lunr.tokenizer.separator = /[\s\-\.]+/ + + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') + lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') + + var index = lunr(function () { + this.ref('location') + this.field('title',{boost: 100}) + this.field('text') + documenterSearchIndex['docs'].forEach(function(e) { + this.add(e) + }, this) + }) + var store = {} + + documenterSearchIndex['docs'].forEach(function(e) { + store[e.location] = {title: e.title, category: e.category, page: e.page} + }) + + $(function(){ + searchresults = $('#documenter-search-results'); + searchinfo = $('#documenter-search-info'); + searchbox = $('#documenter-search-query'); + function update_search(querystring) { + tokens = lunr.tokenizer(querystring) + results = index.query(function (q) { + tokens.forEach(function (t) { + q.term(t.toString(), { + fields: ["title"], + boost: 100, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["title"], + boost: 10, + usePipeline: true, + editDistance: 2, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["text"], + boost: 1, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + }) + }) + searchinfo.text("Number of results: " + results.length) + searchresults.empty() + results.forEach(function(result) { + data = store[result.ref] + link = $(''+data.title+'') + link.attr('href', documenterBaseURL+'/'+result.ref) + if (data.category != "page"){ + cat = $('('+data.category+', '+data.page+')') + } else { + cat = $('('+data.category+')') + } + li = $('
  • ').append(link).append(" ").append(cat) + searchresults.append(li) + }) + } + + function update_search_box() { + querystring = searchbox.val() + update_search(querystring) + } + + searchbox.keyup(_.debounce(update_search_box, 250)) + searchbox.change(update_search_box) + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/previews/PR441/assets/themes/documenter-dark.css b/previews/PR441/assets/themes/documenter-dark.css new file mode 100644 index 00000000..f866234f --- /dev/null +++ b/previews/PR441/assets/themes/documenter-dark.css @@ -0,0 +1,7642 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close, .is-unselectable, html.theme--documenter-dark .button, html.theme--documenter-dark .file, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after, html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +html.theme--documenter-dark .box:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before, html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:focus, html.theme--documenter-dark .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .delete:active, html.theme--documenter-dark .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete, html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.delete, html.theme--documenter-dark .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.delete, html.theme--documenter-dark .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .button.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, html.theme--documenter-dark .modal, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .button, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 0.4em; + box-shadow: none; + display: inline-flex; + font-size: 15px; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + html.theme--documenter-dark .button:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .button:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .is-active.button, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis { + outline: none; } + html.theme--documenter-dark .button[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], + fieldset[disabled] html.theme--documenter-dark .button, + html.theme--documenter-dark fieldset[disabled] .button, + fieldset[disabled] html.theme--documenter-dark .input, + html.theme--documenter-dark fieldset[disabled] .input, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] html.theme--documenter-dark .textarea, + html.theme--documenter-dark fieldset[disabled] .textarea, + fieldset[disabled] html.theme--documenter-dark .select select, + html.theme--documenter-dark .select fieldset[disabled] select, + fieldset[disabled] html.theme--documenter-dark .file-cta, + html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, + fieldset[disabled] html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 15px !important; } + +.is-size-7, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + font-size: 0.85em !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 15px !important; } + .is-size-7-mobile { + font-size: 0.85em !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 15px !important; } + .is-size-7-tablet { + font-size: 0.85em !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 15px !important; } + .is-size-7-touch { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 15px !important; } + .is-size-7-desktop { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 15px !important; } + .is-size-7-widescreen { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 15px !important; } + .is-size-7-fullhd { + font-size: 0.85em !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: #ecf0f1 !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #cfd9db !important; } + +.has-background-light { + background-color: #ecf0f1 !important; } + +.has-text-dark { + color: #282f2f !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #111414 !important; } + +.has-background-dark { + background-color: #282f2f !important; } + +.has-text-primary { + color: #375a7f !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #28415b !important; } + +.has-background-primary { + background-color: #375a7f !important; } + +.has-text-link { + color: #1abc9c !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #148f77 !important; } + +.has-background-link { + background-color: #1abc9c !important; } + +.has-text-info { + color: #024c7d !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #012d4b !important; } + +.has-background-info { + background-color: #024c7d !important; } + +.has-text-success { + color: #008438 !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #005122 !important; } + +.has-background-success { + background-color: #008438 !important; } + +.has-text-warning { + color: #ad8100 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #7a5b00 !important; } + +.has-background-warning { + background-color: #ad8100 !important; } + +.has-text-danger { + color: #9e1b0d !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #6f1309 !important; } + +.has-background-danger { + background-color: #9e1b0d !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #282f2f !important; } + +.has-background-grey-darker { + background-color: #282f2f !important; } + +.has-text-grey-dark { + color: #343c3d !important; } + +.has-background-grey-dark { + background-color: #343c3d !important; } + +.has-text-grey { + color: #5e6d6f !important; } + +.has-background-grey { + background-color: #5e6d6f !important; } + +.has-text-grey-light { + color: #8c9b9d !important; } + +.has-background-grey-light { + background-color: #8c9b9d !important; } + +.has-text-grey-lighter { + color: #dbdee0 !important; } + +.has-background-grey-lighter { + background-color: #dbdee0 !important; } + +.has-text-white-ter { + color: #ecf0f1 !important; } + +.has-background-white-ter { + background-color: #ecf0f1 !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +html.theme--documenter-dark { + /* This file contain the overall layout. + * + * The main container is
    that is identified by id #documenter. + */ + /* a11y-dark theme */ + /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ + /* @author: ericwbailey */ + /* Comment */ + /* Red */ + /* Orange */ + /* Yellow */ + /* Green */ + /* Blue */ + /* Purple */ } + html.theme--documenter-dark html { + background-color: #1f2424; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + html.theme--documenter-dark article, + html.theme--documenter-dark aside, + html.theme--documenter-dark figure, + html.theme--documenter-dark footer, + html.theme--documenter-dark header, + html.theme--documenter-dark hgroup, + html.theme--documenter-dark section { + display: block; } + html.theme--documenter-dark body, + html.theme--documenter-dark button, + html.theme--documenter-dark input, + html.theme--documenter-dark select, + html.theme--documenter-dark textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #e74c3c; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + html.theme--documenter-dark hr { + background-color: #282f2f; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + html.theme--documenter-dark img { + height: auto; + max-width: 100%; } + html.theme--documenter-dark input[type="checkbox"], + html.theme--documenter-dark input[type="radio"] { + vertical-align: baseline; } + html.theme--documenter-dark small { + font-size: 0.875em; } + html.theme--documenter-dark span { + font-style: inherit; + font-weight: inherit; } + html.theme--documenter-dark strong { + color: #f2f2f2; + font-weight: 700; } + html.theme--documenter-dark fieldset { + border: none; } + html.theme--documenter-dark pre { + -webkit-overflow-scrolling: touch; + background-color: #282f2f; + color: #fff; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + html.theme--documenter-dark table td, + html.theme--documenter-dark table th { + vertical-align: top; } + html.theme--documenter-dark table td:not([align]), + html.theme--documenter-dark table th:not([align]) { + text-align: left; } + html.theme--documenter-dark table th { + color: #f2f2f2; } + html.theme--documenter-dark .box { + background-color: #343c3d; + border-radius: 8px; + box-shadow: none; + color: #fff; + display: block; + padding: 1.25rem; } + html.theme--documenter-dark a.box:hover, html.theme--documenter-dark a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #1abc9c; } + html.theme--documenter-dark a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #1abc9c; } + html.theme--documenter-dark .button { + background-color: #282f2f; + border-color: #4c5759; + border-width: 1px; + color: #375a7f; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + html.theme--documenter-dark .button strong { + color: inherit; } + html.theme--documenter-dark .button .icon, html.theme--documenter-dark .button .icon.is-small, html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search > input.icon, html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search > input.icon, html.theme--documenter-dark .button .icon.is-medium, html.theme--documenter-dark .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + html.theme--documenter-dark .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + html.theme--documenter-dark .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + html.theme--documenter-dark .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + html.theme--documenter-dark .button:hover, html.theme--documenter-dark .button.is-hovered { + border-color: #8c9b9d; + color: #f2f2f2; } + html.theme--documenter-dark .button:focus, html.theme--documenter-dark .button.is-focused { + border-color: #8c9b9d; + color: #17a689; } + html.theme--documenter-dark .button:focus:not(:active), html.theme--documenter-dark .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .button:active, html.theme--documenter-dark .button.is-active { + border-color: #343c3d; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text { + background-color: transparent; + border-color: transparent; + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .button.is-text:hover, html.theme--documenter-dark .button.is-text.is-hovered, html.theme--documenter-dark .button.is-text:focus, html.theme--documenter-dark .button.is-text.is-focused { + background-color: #282f2f; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text:active, html.theme--documenter-dark .button.is-text.is-active { + background-color: #1d2122; + color: #f2f2f2; } + html.theme--documenter-dark .button.is-text[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:hover, html.theme--documenter-dark .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:focus, html.theme--documenter-dark .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white:focus:not(:active), html.theme--documenter-dark .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-hovered { + background-color: black; } + html.theme--documenter-dark .button.is-white.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + html.theme--documenter-dark .button.is-white.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-white.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:hover, html.theme--documenter-dark .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:focus, html.theme--documenter-dark .button.is-black.is-focused { + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black:focus:not(:active), html.theme--documenter-dark .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + html.theme--documenter-dark .button.is-black[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-black.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + html.theme--documenter-dark .button.is-black.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + html.theme--documenter-dark .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:hover, html.theme--documenter-dark .button.is-light.is-hovered { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:focus, html.theme--documenter-dark .button.is-light.is-focused { + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light:focus:not(:active), html.theme--documenter-dark .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light.is-active { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .button.is-light[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-light.is-inverted { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-hovered { + background-color: #1d2122; } + html.theme--documenter-dark .button.is-light.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-outlined.is-focused { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-light.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark, html.theme--documenter-dark .content kbd.button { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover, html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused { + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark:focus:not(:active), html.theme--documenter-dark .content kbd.button:focus:not(:active), html.theme--documenter-dark .button.is-dark.is-focused:not(:active), html.theme--documenter-dark .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark[disabled], html.theme--documenter-dark .content kbd.button[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark, + fieldset[disabled] html.theme--documenter-dark .content kbd.button { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-dark.is-inverted, html.theme--documenter-dark .content kbd.button.is-inverted { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted:hover, html.theme--documenter-dark .content kbd.button.is-inverted:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered { + background-color: #dde4e6; } + html.theme--documenter-dark .button.is-dark.is-inverted[disabled], html.theme--documenter-dark .content kbd.button.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-loading::after, html.theme--documenter-dark .content kbd.button.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-dark.is-outlined, html.theme--documenter-dark .content kbd.button.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-outlined.is-focused { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + html.theme--documenter-dark .button.is-dark.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #282f2f #282f2f !important; } + html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + html.theme--documenter-dark .button.is-primary, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #335476; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary:focus:not(:active), html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus:not(:active), html.theme--documenter-dark .button.is-primary.is-focused:not(:active), html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-primary[disabled], html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink { + background-color: #375a7f; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-primary.is-inverted, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-primary.is-inverted[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-primary.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #375a7f; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #375a7f #375a7f !important; } + html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-primary.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #375a7f; + box-shadow: none; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #375a7f #375a7f !important; } + html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-link { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:hover, html.theme--documenter-dark .button.is-link.is-hovered { + background-color: #18b193; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:focus, html.theme--documenter-dark .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link:focus:not(:active), html.theme--documenter-dark .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link.is-active { + background-color: #17a689; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-link[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link { + background-color: #1abc9c; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-link.is-inverted { + background-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-link.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-outlined.is-focused { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-link.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + box-shadow: none; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-info { + background-color: #024c7d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:hover, html.theme--documenter-dark .button.is-info.is-hovered { + background-color: #024470; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:focus, html.theme--documenter-dark .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info:focus:not(:active), html.theme--documenter-dark .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info.is-active { + background-color: #023d64; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-info[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info { + background-color: #024c7d; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-info.is-inverted { + background-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-info.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-info.is-outlined { + background-color: transparent; + border-color: #024c7d; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-outlined.is-focused { + background-color: #024c7d; + border-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #024c7d #024c7d !important; } + html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-info.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined { + background-color: transparent; + border-color: #024c7d; + box-shadow: none; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #024c7d #024c7d !important; } + html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-success { + background-color: #008438; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:hover, html.theme--documenter-dark .button.is-success.is-hovered { + background-color: #007733; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:focus, html.theme--documenter-dark .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success:focus:not(:active), html.theme--documenter-dark .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success.is-active { + background-color: #006b2d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-success[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success { + background-color: #008438; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-success.is-inverted { + background-color: #fff; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-success.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-success.is-outlined { + background-color: transparent; + border-color: #008438; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-outlined.is-focused { + background-color: #008438; + border-color: #008438; + color: #fff; } + html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #008438 #008438 !important; } + html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-success.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined { + background-color: transparent; + border-color: #008438; + box-shadow: none; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #008438; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #008438 #008438 !important; } + html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-warning { + background-color: #ad8100; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:hover, html.theme--documenter-dark .button.is-warning.is-hovered { + background-color: #a07700; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:focus, html.theme--documenter-dark .button.is-warning.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning:focus:not(:active), html.theme--documenter-dark .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning.is-active { + background-color: #946e00; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-warning[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning { + background-color: #ad8100; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-warning.is-inverted { + background-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-warning.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ad8100; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-outlined.is-focused { + background-color: #ad8100; + border-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ad8100 #ad8100 !important; } + html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-warning.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ad8100; + box-shadow: none; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ad8100 #ad8100 !important; } + html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-danger { + background-color: #9e1b0d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:hover, html.theme--documenter-dark .button.is-danger.is-hovered { + background-color: #92190c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:focus, html.theme--documenter-dark .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger:focus:not(:active), html.theme--documenter-dark .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger.is-active { + background-color: #86170b; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .button.is-danger[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger { + background-color: #9e1b0d; + border-color: transparent; + box-shadow: none; } + html.theme--documenter-dark .button.is-danger.is-inverted { + background-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + html.theme--documenter-dark .button.is-danger.is-inverted[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-danger.is-outlined { + background-color: transparent; + border-color: #9e1b0d; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-outlined.is-focused { + background-color: #9e1b0d; + border-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #9e1b0d #9e1b0d !important; } + html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + html.theme--documenter-dark .button.is-danger.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined { + background-color: transparent; + border-color: #9e1b0d; + box-shadow: none; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #9e1b0d #9e1b0d !important; } + html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + html.theme--documenter-dark .button.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .button.is-normal { + font-size: 15px; } + html.theme--documenter-dark .button.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .button.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .button[disabled], + fieldset[disabled] html.theme--documenter-dark .button { + background-color: #8c9b9d; + border-color: #dbdee0; + box-shadow: none; + opacity: 0.5; } + html.theme--documenter-dark .button.is-fullwidth { + display: flex; + width: 100%; } + html.theme--documenter-dark .button.is-loading { + color: transparent !important; + pointer-events: none; } + html.theme--documenter-dark .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + html.theme--documenter-dark .button.is-static { + background-color: #282f2f; + border-color: #5e6d6f; + color: #dbdee0; + box-shadow: none; + pointer-events: none; } + html.theme--documenter-dark .button.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .buttons .button { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + html.theme--documenter-dark .buttons:last-child { + margin-bottom: -0.5rem; } + html.theme--documenter-dark .buttons:not(:last-child) { + margin-bottom: 1rem; } + html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + html.theme--documenter-dark .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + html.theme--documenter-dark .buttons.has-addons .button:last-child { + margin-right: 0; } + html.theme--documenter-dark .buttons.has-addons .button:hover, html.theme--documenter-dark .buttons.has-addons .button.is-hovered { + z-index: 2; } + html.theme--documenter-dark .buttons.has-addons .button:focus, html.theme--documenter-dark .buttons.has-addons .button.is-focused, html.theme--documenter-dark .buttons.has-addons .button:active, html.theme--documenter-dark .buttons.has-addons .button.is-active, html.theme--documenter-dark .buttons.has-addons .button.is-selected { + z-index: 3; } + html.theme--documenter-dark .buttons.has-addons .button:focus:hover, html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover, html.theme--documenter-dark .buttons.has-addons .button:active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + html.theme--documenter-dark .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .buttons.is-centered { + justify-content: center; } + html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + html.theme--documenter-dark .buttons.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + html.theme--documenter-dark .container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .container { + max-width: 992px; } + html.theme--documenter-dark .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + html.theme--documenter-dark .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + html.theme--documenter-dark .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .container { + max-width: 1344px; } } + html.theme--documenter-dark .content li + li { + margin-top: 0.25em; } + html.theme--documenter-dark .content p:not(:last-child), + html.theme--documenter-dark .content dl:not(:last-child), + html.theme--documenter-dark .content ol:not(:last-child), + html.theme--documenter-dark .content ul:not(:last-child), + html.theme--documenter-dark .content blockquote:not(:last-child), + html.theme--documenter-dark .content pre:not(:last-child), + html.theme--documenter-dark .content table:not(:last-child) { + margin-bottom: 1em; } + html.theme--documenter-dark .content h1, + html.theme--documenter-dark .content h2, + html.theme--documenter-dark .content h3, + html.theme--documenter-dark .content h4, + html.theme--documenter-dark .content h5, + html.theme--documenter-dark .content h6 { + color: #f2f2f2; + font-weight: 600; + line-height: 1.125; } + html.theme--documenter-dark .content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + html.theme--documenter-dark .content h1:not(:first-child) { + margin-top: 1em; } + html.theme--documenter-dark .content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + html.theme--documenter-dark .content h2:not(:first-child) { + margin-top: 1.1428em; } + html.theme--documenter-dark .content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + html.theme--documenter-dark .content h3:not(:first-child) { + margin-top: 1.3333em; } + html.theme--documenter-dark .content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + html.theme--documenter-dark .content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + html.theme--documenter-dark .content h6 { + font-size: 1em; + margin-bottom: 1em; } + html.theme--documenter-dark .content blockquote { + background-color: #282f2f; + border-left: 5px solid #5e6d6f; + padding: 1.25em 1.5em; } + html.theme--documenter-dark .content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ol:not([type]) { + list-style-type: decimal; } + html.theme--documenter-dark .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: left; } + html.theme--documenter-dark .content table thead td, + html.theme--documenter-dark .content table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + html.theme--documenter-dark .content table tfoot td, + html.theme--documenter-dark .content table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + html.theme--documenter-dark .content table tbody tr:last-child td, + html.theme--documenter-dark .content table tbody tr:last-child th { + border-bottom-width: 0; } + html.theme--documenter-dark .content .tabs li + li { + margin-top: 0; } + html.theme--documenter-dark .content.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.85em; } + html.theme--documenter-dark .content.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .content.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + html.theme--documenter-dark .icon.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + html.theme--documenter-dark .icon.is-medium { + height: 2rem; + width: 2rem; } + html.theme--documenter-dark .icon.is-large { + height: 3rem; + width: 3rem; } + html.theme--documenter-dark .image, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + html.theme--documenter-dark .image img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + html.theme--documenter-dark .image img.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, + html.theme--documenter-dark .image.is-square .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + html.theme--documenter-dark .image.is-1by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + html.theme--documenter-dark .image.is-5by4 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + html.theme--documenter-dark .image.is-4by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + html.theme--documenter-dark .image.is-3by2 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + html.theme--documenter-dark .image.is-5by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + html.theme--documenter-dark .image.is-16by9 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + html.theme--documenter-dark .image.is-2by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + html.theme--documenter-dark .image.is-3by1 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + html.theme--documenter-dark .image.is-4by5 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + html.theme--documenter-dark .image.is-3by4 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + html.theme--documenter-dark .image.is-2by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + html.theme--documenter-dark .image.is-3by5 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + html.theme--documenter-dark .image.is-9by16 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + html.theme--documenter-dark .image.is-1by2 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + html.theme--documenter-dark .image.is-1by3 .has-ratio, + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + html.theme--documenter-dark .image.is-square, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square, html.theme--documenter-dark .image.is-1by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + html.theme--documenter-dark .image.is-5by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + html.theme--documenter-dark .image.is-4by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + html.theme--documenter-dark .image.is-3by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + html.theme--documenter-dark .image.is-5by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + html.theme--documenter-dark .image.is-16by9, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + html.theme--documenter-dark .image.is-2by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + html.theme--documenter-dark .image.is-3by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + html.theme--documenter-dark .image.is-4by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + html.theme--documenter-dark .image.is-3by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + html.theme--documenter-dark .image.is-2by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + html.theme--documenter-dark .image.is-3by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + html.theme--documenter-dark .image.is-9by16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + html.theme--documenter-dark .image.is-1by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + html.theme--documenter-dark .image.is-1by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + html.theme--documenter-dark .image.is-16x16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + html.theme--documenter-dark .image.is-24x24, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + html.theme--documenter-dark .image.is-32x32, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + html.theme--documenter-dark .image.is-48x48, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + html.theme--documenter-dark .image.is-64x64, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + html.theme--documenter-dark .image.is-96x96, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + html.theme--documenter-dark .image.is-128x128, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + html.theme--documenter-dark .notification { + background-color: #282f2f; + border-radius: 0.4em; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + html.theme--documenter-dark .notification strong { + color: currentColor; } + html.theme--documenter-dark .notification code, + html.theme--documenter-dark .notification pre { + background: white; } + html.theme--documenter-dark .notification pre code { + background: transparent; } + html.theme--documenter-dark .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + html.theme--documenter-dark .notification .title, + html.theme--documenter-dark .notification .subtitle, + html.theme--documenter-dark .notification .content { + color: currentColor; } + html.theme--documenter-dark .notification.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .notification.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .notification.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .notification.is-dark, html.theme--documenter-dark .content kbd.notification { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .notification.is-primary, html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .notification.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .notification.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .notification.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .notification.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .notification.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 15px; + overflow: hidden; + padding: 0; + width: 100%; } + html.theme--documenter-dark .progress::-webkit-progress-bar { + background-color: #5e6d6f; } + html.theme--documenter-dark .progress::-webkit-progress-value { + background-color: #dbdee0; } + html.theme--documenter-dark .progress::-moz-progress-bar { + background-color: #dbdee0; } + html.theme--documenter-dark .progress::-ms-fill { + background-color: #dbdee0; + border: none; } + html.theme--documenter-dark .progress.is-white::-webkit-progress-value { + background-color: white; } + html.theme--documenter-dark .progress.is-white::-moz-progress-bar { + background-color: white; } + html.theme--documenter-dark .progress.is-white::-ms-fill { + background-color: white; } + html.theme--documenter-dark .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + html.theme--documenter-dark .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-light::-webkit-progress-value { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light::-moz-progress-bar { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light::-ms-fill { + background-color: #ecf0f1; } + html.theme--documenter-dark .progress.is-light:indeterminate { + background-image: linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-dark::-webkit-progress-value, html.theme--documenter-dark .content kbd.progress::-webkit-progress-value { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark::-moz-progress-bar, html.theme--documenter-dark .content kbd.progress::-moz-progress-bar { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark::-ms-fill, html.theme--documenter-dark .content kbd.progress::-ms-fill { + background-color: #282f2f; } + html.theme--documenter-dark .progress.is-dark:indeterminate, html.theme--documenter-dark .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #282f2f 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-primary::-webkit-progress-value, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary::-moz-progress-bar, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary::-ms-fill, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #375a7f; } + html.theme--documenter-dark .progress.is-primary:indeterminate, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #375a7f 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-link::-webkit-progress-value { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link::-moz-progress-bar { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link::-ms-fill { + background-color: #1abc9c; } + html.theme--documenter-dark .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-info::-webkit-progress-value { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info::-moz-progress-bar { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info::-ms-fill { + background-color: #024c7d; } + html.theme--documenter-dark .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #024c7d 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-success::-webkit-progress-value { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success::-moz-progress-bar { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success::-ms-fill { + background-color: #008438; } + html.theme--documenter-dark .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #008438 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-warning::-webkit-progress-value { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning::-moz-progress-bar { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning::-ms-fill { + background-color: #ad8100; } + html.theme--documenter-dark .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ad8100 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress.is-danger::-webkit-progress-value { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger::-moz-progress-bar { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger::-ms-fill { + background-color: #9e1b0d; } + html.theme--documenter-dark .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%); } + html.theme--documenter-dark .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #5e6d6f; + background-image: linear-gradient(to right, #fff 30%, #5e6d6f 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + html.theme--documenter-dark .progress.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.85em; } + html.theme--documenter-dark .progress.is-medium { + height: 1.25rem; } + html.theme--documenter-dark .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + html.theme--documenter-dark .table { + background-color: #343c3d; + color: #fff; } + html.theme--documenter-dark .table td, + html.theme--documenter-dark .table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .table td.is-white, + html.theme--documenter-dark .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .table td.is-black, + html.theme--documenter-dark .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .table td.is-light, + html.theme--documenter-dark .table th.is-light { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .table td.is-dark, + html.theme--documenter-dark .table th.is-dark { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .table td.is-primary, + html.theme--documenter-dark .table th.is-primary { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table td.is-link, + html.theme--documenter-dark .table th.is-link { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .table td.is-info, + html.theme--documenter-dark .table th.is-info { + background-color: #024c7d; + border-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .table td.is-success, + html.theme--documenter-dark .table th.is-success { + background-color: #008438; + border-color: #008438; + color: #fff; } + html.theme--documenter-dark .table td.is-warning, + html.theme--documenter-dark .table th.is-warning { + background-color: #ad8100; + border-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .table td.is-danger, + html.theme--documenter-dark .table th.is-danger { + background-color: #9e1b0d; + border-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .table td.is-narrow, + html.theme--documenter-dark .table th.is-narrow { + white-space: nowrap; + width: 1%; } + html.theme--documenter-dark .table td.is-selected, + html.theme--documenter-dark .table th.is-selected { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table td.is-selected a, + html.theme--documenter-dark .table td.is-selected strong, + html.theme--documenter-dark .table th.is-selected a, + html.theme--documenter-dark .table th.is-selected strong { + color: currentColor; } + html.theme--documenter-dark .table th { + color: #f2f2f2; } + html.theme--documenter-dark .table th:not([align]) { + text-align: left; } + html.theme--documenter-dark .table tr.is-selected { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .table tr.is-selected a, + html.theme--documenter-dark .table tr.is-selected strong { + color: currentColor; } + html.theme--documenter-dark .table tr.is-selected td, + html.theme--documenter-dark .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + html.theme--documenter-dark .table thead { + background-color: transparent; } + html.theme--documenter-dark .table thead td, + html.theme--documenter-dark .table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + html.theme--documenter-dark .table tfoot { + background-color: transparent; } + html.theme--documenter-dark .table tfoot td, + html.theme--documenter-dark .table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + html.theme--documenter-dark .table tbody { + background-color: transparent; } + html.theme--documenter-dark .table tbody tr:last-child td, + html.theme--documenter-dark .table tbody tr:last-child th { + border-bottom-width: 0; } + html.theme--documenter-dark .table.is-bordered td, + html.theme--documenter-dark .table.is-bordered th { + border-width: 1px; } + html.theme--documenter-dark .table.is-bordered tr:last-child td, + html.theme--documenter-dark .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + html.theme--documenter-dark .table.is-fullwidth { + width: 100%; } + html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: #2d3435; } + html.theme--documenter-dark .table.is-narrow td, + html.theme--documenter-dark .table.is-narrow th { + padding: 0.25em 0.5em; } + html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #282f2f; } + html.theme--documenter-dark .table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + html.theme--documenter-dark .tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .tags .tag, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags .content kbd, html.theme--documenter-dark .content .tags kbd { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + html.theme--documenter-dark .tags:last-child { + margin-bottom: -0.5rem; } + html.theme--documenter-dark .tags:not(:last-child) { + margin-bottom: 1rem; } + html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 0.4em; + color: #fff; + display: inline-flex; + font-size: 0.85em; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + html.theme--documenter-dark .tag:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete, html.theme--documenter-dark .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag:not(body).is-white, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-white, html.theme--documenter-dark .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag:not(body).is-black, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-black, html.theme--documenter-dark .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag:not(body).is-light, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-light, html.theme--documenter-dark .content kbd:not(body).is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag:not(body).is-dark, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-dark, html.theme--documenter-dark .content kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag:not(body).is-primary, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body).is-primary { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-link, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-link, html.theme--documenter-dark .content kbd:not(body).is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-info, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-info, html.theme--documenter-dark .content kbd:not(body).is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-success, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-success, html.theme--documenter-dark .content kbd:not(body).is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-warning, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-warning, html.theme--documenter-dark .content kbd:not(body).is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-danger, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-danger, html.theme--documenter-dark .content kbd:not(body).is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag:not(body).is-normal, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-normal, html.theme--documenter-dark .content kbd:not(body).is-normal { + font-size: 0.85em; } + html.theme--documenter-dark .tag:not(body).is-medium, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-medium, html.theme--documenter-dark .content kbd:not(body).is-medium { + font-size: 15px; } + html.theme--documenter-dark .tag:not(body).is-large, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-large, html.theme--documenter-dark .content kbd:not(body).is-large { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body).is-delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete, html.theme--documenter-dark .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before, html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag:not(body).is-delete:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, html.theme--documenter-dark .content kbd:not(body).is-delete:hover, html.theme--documenter-dark .tag:not(body).is-delete:focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, html.theme--documenter-dark .content kbd:not(body).is-delete:focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag:not(body).is-delete:active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:active, html.theme--documenter-dark .content kbd:not(body).is-delete:active { + background-color: #111414; } + html.theme--documenter-dark .tag:not(body).is-rounded, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-rounded, html.theme--documenter-dark .content kbd:not(body).is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + html.theme--documenter-dark a.tag:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + html.theme--documenter-dark .title, + html.theme--documenter-dark .subtitle { + word-break: break-word; } + html.theme--documenter-dark .title em, + html.theme--documenter-dark .title span, + html.theme--documenter-dark .subtitle em, + html.theme--documenter-dark .subtitle span { + font-weight: inherit; } + html.theme--documenter-dark .title sub, + html.theme--documenter-dark .subtitle sub { + font-size: 0.75em; } + html.theme--documenter-dark .title sup, + html.theme--documenter-dark .subtitle sup { + font-size: 0.75em; } + html.theme--documenter-dark .title .tag, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .title .content kbd, html.theme--documenter-dark .content .title kbd, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .highlight { + margin-top: -0.75rem; } + html.theme--documenter-dark .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + html.theme--documenter-dark .title.is-1 { + font-size: 3rem; } + html.theme--documenter-dark .title.is-2 { + font-size: 2.5rem; } + html.theme--documenter-dark .title.is-3 { + font-size: 2rem; } + html.theme--documenter-dark .title.is-4 { + font-size: 1.5rem; } + html.theme--documenter-dark .title.is-5 { + font-size: 1.25rem; } + html.theme--documenter-dark .title.is-6 { + font-size: 15px; } + html.theme--documenter-dark .title.is-7 { + font-size: 0.85em; } + html.theme--documenter-dark .subtitle { + color: #8c9b9d; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + html.theme--documenter-dark .subtitle strong { + color: #8c9b9d; + font-weight: 600; } + html.theme--documenter-dark .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + html.theme--documenter-dark .subtitle.is-1 { + font-size: 3rem; } + html.theme--documenter-dark .subtitle.is-2 { + font-size: 2.5rem; } + html.theme--documenter-dark .subtitle.is-3 { + font-size: 2rem; } + html.theme--documenter-dark .subtitle.is-4 { + font-size: 1.5rem; } + html.theme--documenter-dark .subtitle.is-5 { + font-size: 1.25rem; } + html.theme--documenter-dark .subtitle.is-6 { + font-size: 15px; } + html.theme--documenter-dark .subtitle.is-7 { + font-size: 0.85em; } + html.theme--documenter-dark .heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + html.theme--documenter-dark .highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + html.theme--documenter-dark .highlight pre { + overflow: auto; + max-width: 100%; } + html.theme--documenter-dark .number { + align-items: center; + background-color: #282f2f; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .select select::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .select select::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .select select:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .select select:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .select select.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], + fieldset[disabled] html.theme--documenter-dark .input, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + fieldset[disabled] html.theme--documenter-dark .textarea, + fieldset[disabled] html.theme--documenter-dark .select select { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .select select[disabled]::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .select select[disabled]:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, + fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly], html.theme--documenter-dark .textarea[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white, html.theme--documenter-dark .is-white.textarea { + border-color: white; } + html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-active, html.theme--documenter-dark .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black, html.theme--documenter-dark .is-black.textarea { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-active, html.theme--documenter-dark .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light, html.theme--documenter-dark .is-light.textarea { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-active, html.theme--documenter-dark .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark .content kbd.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link, html.theme--documenter-dark .is-link.textarea { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-active, html.theme--documenter-dark .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info, html.theme--documenter-dark .is-info.textarea { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-active, html.theme--documenter-dark .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success, html.theme--documenter-dark .is-success.textarea { + border-color: #008438; } + html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-active, html.theme--documenter-dark .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning, html.theme--documenter-dark .is-warning.textarea { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, html.theme--documenter-dark .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger, html.theme--documenter-dark .is-danger.textarea { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, html.theme--documenter-dark .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .is-small.textarea { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium, html.theme--documenter-dark .is-medium.textarea { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large, html.theme--documenter-dark .is-large.textarea { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth, html.theme--documenter-dark .is-fullwidth.textarea { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline, html.theme--documenter-dark .is-inline.textarea { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .input.is-static, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + html.theme--documenter-dark .textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + html.theme--documenter-dark .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + html.theme--documenter-dark .textarea[rows] { + height: initial; } + html.theme--documenter-dark .textarea.has-fixed-size { + resize: none; } + html.theme--documenter-dark .checkbox, html.theme--documenter-dark .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .checkbox input, html.theme--documenter-dark .radio input { + cursor: pointer; } + html.theme--documenter-dark .checkbox:hover, html.theme--documenter-dark .radio:hover { + color: #8c9b9d; } + html.theme--documenter-dark .checkbox[disabled], html.theme--documenter-dark .radio[disabled], + fieldset[disabled] html.theme--documenter-dark .checkbox, + fieldset[disabled] html.theme--documenter-dark .radio { + color: white; + cursor: not-allowed; } + html.theme--documenter-dark .radio + .radio { + margin-left: 0.5em; } + html.theme--documenter-dark .select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + html.theme--documenter-dark .select:not(.is-multiple) { + height: 2.25em; } + html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border-color: #1abc9c; + right: 1.125em; + z-index: 4; } + html.theme--documenter-dark .select.is-rounded select, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + html.theme--documenter-dark .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + html.theme--documenter-dark .select select::-ms-expand { + display: none; } + html.theme--documenter-dark .select select[disabled]:hover, + fieldset[disabled] html.theme--documenter-dark .select select:hover { + border-color: #282f2f; } + html.theme--documenter-dark .select select:not([multiple]) { + padding-right: 2.5em; } + html.theme--documenter-dark .select select[multiple] { + height: auto; + padding: 0; } + html.theme--documenter-dark .select select[multiple] option { + padding: 0.5em 1em; } + html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #8c9b9d; } + html.theme--documenter-dark .select.is-white:not(:hover)::after { + border-color: white; } + html.theme--documenter-dark .select.is-white select { + border-color: white; } + html.theme--documenter-dark .select.is-white select:hover, html.theme--documenter-dark .select.is-white select.is-hovered { + border-color: #f2f2f2; } + html.theme--documenter-dark .select.is-white select:focus, html.theme--documenter-dark .select.is-white select.is-focused, html.theme--documenter-dark .select.is-white select:active, html.theme--documenter-dark .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .select.is-black select { + border-color: #0a0a0a; } + html.theme--documenter-dark .select.is-black select:hover, html.theme--documenter-dark .select.is-black select.is-hovered { + border-color: black; } + html.theme--documenter-dark .select.is-black select:focus, html.theme--documenter-dark .select.is-black select.is-focused, html.theme--documenter-dark .select.is-black select:active, html.theme--documenter-dark .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .select.is-light:not(:hover)::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .select.is-light select { + border-color: #ecf0f1; } + html.theme--documenter-dark .select.is-light select:hover, html.theme--documenter-dark .select.is-light select.is-hovered { + border-color: #dde4e6; } + html.theme--documenter-dark .select.is-light select:focus, html.theme--documenter-dark .select.is-light select.is-focused, html.theme--documenter-dark .select.is-light select:active, html.theme--documenter-dark .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .select.is-dark:not(:hover)::after, html.theme--documenter-dark .content kbd.select:not(:hover)::after { + border-color: #282f2f; } + html.theme--documenter-dark .select.is-dark select, html.theme--documenter-dark .content kbd.select select { + border-color: #282f2f; } + html.theme--documenter-dark .select.is-dark select:hover, html.theme--documenter-dark .content kbd.select select:hover, html.theme--documenter-dark .select.is-dark select.is-hovered, html.theme--documenter-dark .content kbd.select select.is-hovered { + border-color: #1d2122; } + html.theme--documenter-dark .select.is-dark select:focus, html.theme--documenter-dark .content kbd.select select:focus, html.theme--documenter-dark .select.is-dark select.is-focused, html.theme--documenter-dark .content kbd.select select.is-focused, html.theme--documenter-dark .select.is-dark select:active, html.theme--documenter-dark .content kbd.select select:active, html.theme--documenter-dark .select.is-dark select.is-active, html.theme--documenter-dark .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .select.is-primary:not(:hover)::after, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #375a7f; } + html.theme--documenter-dark .select.is-primary select, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select { + border-color: #375a7f; } + html.theme--documenter-dark .select.is-primary select:hover, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:hover, html.theme--documenter-dark .select.is-primary select.is-hovered, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #2f4d6d; } + html.theme--documenter-dark .select.is-primary select:focus, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:focus, html.theme--documenter-dark .select.is-primary select.is-focused, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-focused, html.theme--documenter-dark .select.is-primary select:active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:active, html.theme--documenter-dark .select.is-primary select.is-active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .select.is-link:not(:hover)::after { + border-color: #1abc9c; } + html.theme--documenter-dark .select.is-link select { + border-color: #1abc9c; } + html.theme--documenter-dark .select.is-link select:hover, html.theme--documenter-dark .select.is-link select.is-hovered { + border-color: #17a689; } + html.theme--documenter-dark .select.is-link select:focus, html.theme--documenter-dark .select.is-link select.is-focused, html.theme--documenter-dark .select.is-link select:active, html.theme--documenter-dark .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select.is-info:not(:hover)::after { + border-color: #024c7d; } + html.theme--documenter-dark .select.is-info select { + border-color: #024c7d; } + html.theme--documenter-dark .select.is-info select:hover, html.theme--documenter-dark .select.is-info select.is-hovered { + border-color: #023d64; } + html.theme--documenter-dark .select.is-info select:focus, html.theme--documenter-dark .select.is-info select.is-focused, html.theme--documenter-dark .select.is-info select:active, html.theme--documenter-dark .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .select.is-success:not(:hover)::after { + border-color: #008438; } + html.theme--documenter-dark .select.is-success select { + border-color: #008438; } + html.theme--documenter-dark .select.is-success select:hover, html.theme--documenter-dark .select.is-success select.is-hovered { + border-color: #006b2d; } + html.theme--documenter-dark .select.is-success select:focus, html.theme--documenter-dark .select.is-success select.is-focused, html.theme--documenter-dark .select.is-success select:active, html.theme--documenter-dark .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .select.is-warning:not(:hover)::after { + border-color: #ad8100; } + html.theme--documenter-dark .select.is-warning select { + border-color: #ad8100; } + html.theme--documenter-dark .select.is-warning select:hover, html.theme--documenter-dark .select.is-warning select.is-hovered { + border-color: #946e00; } + html.theme--documenter-dark .select.is-warning select:focus, html.theme--documenter-dark .select.is-warning select.is-focused, html.theme--documenter-dark .select.is-warning select:active, html.theme--documenter-dark .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .select.is-danger:not(:hover)::after { + border-color: #9e1b0d; } + html.theme--documenter-dark .select.is-danger select { + border-color: #9e1b0d; } + html.theme--documenter-dark .select.is-danger select:hover, html.theme--documenter-dark .select.is-danger select.is-hovered { + border-color: #86170b; } + html.theme--documenter-dark .select.is-danger select:focus, html.theme--documenter-dark .select.is-danger select.is-focused, html.theme--documenter-dark .select.is-danger select:active, html.theme--documenter-dark .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .select.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .select.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .select.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .select.is-disabled::after { + border-color: white; } + html.theme--documenter-dark .select.is-fullwidth { + width: 100%; } + html.theme--documenter-dark .select.is-fullwidth select { + width: 100%; } + html.theme--documenter-dark .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + html.theme--documenter-dark .select.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.85em; } + html.theme--documenter-dark .select.is-loading.is-medium:after { + font-size: 1.25rem; } + html.theme--documenter-dark .select.is-loading.is-large:after { + font-size: 1.5rem; } + html.theme--documenter-dark .file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + html.theme--documenter-dark .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:hover .file-cta, html.theme--documenter-dark .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:focus .file-cta, html.theme--documenter-dark .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + html.theme--documenter-dark .file.is-white:active .file-cta, html.theme--documenter-dark .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + html.theme--documenter-dark .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-black:hover .file-cta, html.theme--documenter-dark .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-black:focus .file-cta, html.theme--documenter-dark .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + html.theme--documenter-dark .file.is-black:active .file-cta, html.theme--documenter-dark .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + html.theme--documenter-dark .file.is-light .file-cta { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-light:hover .file-cta, html.theme--documenter-dark .file.is-light.is-hovered .file-cta { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-light:focus .file-cta, html.theme--documenter-dark .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(236, 240, 241, 0.25); + color: #282f2f; } + html.theme--documenter-dark .file.is-light:active .file-cta, html.theme--documenter-dark .file.is-light.is-active .file-cta { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + html.theme--documenter-dark .file.is-dark .file-cta, html.theme--documenter-dark .content kbd.file .file-cta { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:hover .file-cta, html.theme--documenter-dark .content kbd.file:hover .file-cta, html.theme--documenter-dark .file.is-dark.is-hovered .file-cta, html.theme--documenter-dark .content kbd.file.is-hovered .file-cta { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:focus .file-cta, html.theme--documenter-dark .content kbd.file:focus .file-cta, html.theme--documenter-dark .file.is-dark.is-focused .file-cta, html.theme--documenter-dark .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(40, 47, 47, 0.25); + color: #ecf0f1; } + html.theme--documenter-dark .file.is-dark:active .file-cta, html.theme--documenter-dark .content kbd.file:active .file-cta, html.theme--documenter-dark .file.is-dark.is-active .file-cta, html.theme--documenter-dark .content kbd.file.is-active .file-cta { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + html.theme--documenter-dark .file.is-primary .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-primary:hover .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:hover .file-cta, html.theme--documenter-dark .file.is-primary.is-hovered .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #335476; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-primary:focus .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:focus .file-cta, html.theme--documenter-dark .file.is-primary.is-focused .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(55, 90, 127, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-primary:active .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:active .file-cta, html.theme--documenter-dark .file.is-primary.is-active .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link .file-cta { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link:hover .file-cta, html.theme--documenter-dark .file.is-link.is-hovered .file-cta { + background-color: #18b193; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-link:focus .file-cta, html.theme--documenter-dark .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(26, 188, 156, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-link:active .file-cta, html.theme--documenter-dark .file.is-link.is-active .file-cta { + background-color: #17a689; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info .file-cta { + background-color: #024c7d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info:hover .file-cta, html.theme--documenter-dark .file.is-info.is-hovered .file-cta { + background-color: #024470; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-info:focus .file-cta, html.theme--documenter-dark .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(2, 76, 125, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-info:active .file-cta, html.theme--documenter-dark .file.is-info.is-active .file-cta { + background-color: #023d64; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success .file-cta { + background-color: #008438; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success:hover .file-cta, html.theme--documenter-dark .file.is-success.is-hovered .file-cta { + background-color: #007733; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-success:focus .file-cta, html.theme--documenter-dark .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(0, 132, 56, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-success:active .file-cta, html.theme--documenter-dark .file.is-success.is-active .file-cta { + background-color: #006b2d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning .file-cta { + background-color: #ad8100; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning:hover .file-cta, html.theme--documenter-dark .file.is-warning.is-hovered .file-cta { + background-color: #a07700; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-warning:focus .file-cta, html.theme--documenter-dark .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(173, 129, 0, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-warning:active .file-cta, html.theme--documenter-dark .file.is-warning.is-active .file-cta { + background-color: #946e00; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger .file-cta { + background-color: #9e1b0d; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger:hover .file-cta, html.theme--documenter-dark .file.is-danger.is-hovered .file-cta { + background-color: #92190c; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-danger:focus .file-cta, html.theme--documenter-dark .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(158, 27, 13, 0.25); + color: #fff; } + html.theme--documenter-dark .file.is-danger:active .file-cta, html.theme--documenter-dark .file.is-danger.is-active .file-cta { + background-color: #86170b; + border-color: transparent; + color: #fff; } + html.theme--documenter-dark .file.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.85em; } + html.theme--documenter-dark .file.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .file.is-medium .file-icon .fa { + font-size: 21px; } + html.theme--documenter-dark .file.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .file.is-large .file-icon .fa { + font-size: 28px; } + html.theme--documenter-dark .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .file.has-name.is-empty .file-cta { + border-radius: 0.4em; } + html.theme--documenter-dark .file.has-name.is-empty .file-name { + display: none; } + html.theme--documenter-dark .file.is-boxed .file-label { + flex-direction: column; } + html.theme--documenter-dark .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + html.theme--documenter-dark .file.is-boxed .file-name { + border-width: 0 1px 1px; } + html.theme--documenter-dark .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + html.theme--documenter-dark .file.is-boxed .file-icon .fa { + font-size: 21px; } + html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + html.theme--documenter-dark .file.is-boxed.has-name .file-cta { + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .file.is-boxed.has-name .file-name { + border-radius: 0 0 0.4em 0.4em; + border-width: 0 1px 1px; } + html.theme--documenter-dark .file.is-centered { + justify-content: center; } + html.theme--documenter-dark .file.is-fullwidth .file-label { + width: 100%; } + html.theme--documenter-dark .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + html.theme--documenter-dark .file.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .file.is-right .file-cta { + border-radius: 0 0.4em 0.4em 0; } + html.theme--documenter-dark .file.is-right .file-name { + border-radius: 0.4em 0 0 0.4em; + border-width: 1px 0 1px 1px; + order: -1; } + html.theme--documenter-dark .file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + html.theme--documenter-dark .file-label:hover .file-cta { + background-color: #e5eaec; + color: #282f2f; } + html.theme--documenter-dark .file-label:hover .file-name { + border-color: #596668; } + html.theme--documenter-dark .file-label:active .file-cta { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .file-label:active .file-name { + border-color: #535f61; } + html.theme--documenter-dark .file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + html.theme--documenter-dark .file-cta, + html.theme--documenter-dark .file-name { + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + html.theme--documenter-dark .file-cta { + background-color: #ecf0f1; + color: #343c3d; } + html.theme--documenter-dark .file-name { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + html.theme--documenter-dark .file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + html.theme--documenter-dark .file-icon .fa { + font-size: 14px; } + html.theme--documenter-dark .label { + color: #282f2f; + display: block; + font-size: 15px; + font-weight: 700; } + html.theme--documenter-dark .label:not(:last-child) { + margin-bottom: 0.5em; } + html.theme--documenter-dark .label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.85em; } + html.theme--documenter-dark .label.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .label.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .help { + display: block; + font-size: 0.85em; + margin-top: 0.25rem; } + html.theme--documenter-dark .help.is-white { + color: white; } + html.theme--documenter-dark .help.is-black { + color: #0a0a0a; } + html.theme--documenter-dark .help.is-light { + color: #ecf0f1; } + html.theme--documenter-dark .help.is-dark, html.theme--documenter-dark .content kbd.help { + color: #282f2f; } + html.theme--documenter-dark .help.is-primary, html.theme--documenter-dark .docstring > section > a.help.docs-sourcelink { + color: #375a7f; } + html.theme--documenter-dark .help.is-link { + color: #1abc9c; } + html.theme--documenter-dark .help.is-info { + color: #024c7d; } + html.theme--documenter-dark .help.is-success { + color: #008438; } + html.theme--documenter-dark .help.is-warning { + color: #ad8100; } + html.theme--documenter-dark .help.is-danger { + color: #9e1b0d; } + html.theme--documenter-dark .field:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .field.has-addons { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + html.theme--documenter-dark .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.is-grouped.is-grouped-centered { + justify-content: center; } + html.theme--documenter-dark .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:last-child, html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field.is-horizontal { + display: flex; } } + html.theme--documenter-dark .field-label .label { + font-size: inherit; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .field-label { + margin-bottom: 0.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + html.theme--documenter-dark .field-label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.85em; + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-normal { + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + html.theme--documenter-dark .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + html.theme--documenter-dark .field-body .field .field { + margin-bottom: 0; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + html.theme--documenter-dark .field-body .field { + margin-bottom: 0; } + html.theme--documenter-dark .field-body > .field { + flex-shrink: 1; } + html.theme--documenter-dark .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + html.theme--documenter-dark .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + html.theme--documenter-dark .control { + box-sizing: border-box; + clear: both; + font-size: 15px; + position: relative; + text-align: left; } + html.theme--documenter-dark .control.has-icons-left .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select:focus ~ .icon { + color: #5e6d6f; } + html.theme--documenter-dark .control.has-icons-left .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-small ~ .icon, + html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon, + html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.85em; } + html.theme--documenter-dark .control.has-icons-left .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + html.theme--documenter-dark .control.has-icons-left .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + html.theme--documenter-dark .control.has-icons-left .select.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + html.theme--documenter-dark .control.has-icons-left .icon, html.theme--documenter-dark .control.has-icons-right .icon { + color: #dbdee0; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + html.theme--documenter-dark .control.has-icons-left .input, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + html.theme--documenter-dark .control.has-icons-left .select select { + padding-left: 2.25em; } + html.theme--documenter-dark .control.has-icons-left .icon.is-left { + left: 0; } + html.theme--documenter-dark .control.has-icons-right .input, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + html.theme--documenter-dark .control.has-icons-right .select select { + padding-right: 2.25em; } + html.theme--documenter-dark .control.has-icons-right .icon.is-right { + right: 0; } + html.theme--documenter-dark .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + html.theme--documenter-dark .control.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.85em; } + html.theme--documenter-dark .control.is-loading.is-medium:after { + font-size: 1.25rem; } + html.theme--documenter-dark .control.is-loading.is-large:after { + font-size: 1.5rem; } + html.theme--documenter-dark .breadcrumb { + font-size: 15px; + white-space: nowrap; } + html.theme--documenter-dark .breadcrumb a { + align-items: center; + color: #1abc9c; + display: flex; + justify-content: center; + padding: 0 0.75em; } + html.theme--documenter-dark .breadcrumb a:hover { + color: #1dd2af; } + html.theme--documenter-dark .breadcrumb li { + align-items: center; + display: flex; } + html.theme--documenter-dark .breadcrumb li:first-child a { + padding-left: 0; } + html.theme--documenter-dark .breadcrumb li.is-active a { + color: #f2f2f2; + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb li + li::before { + color: #8c9b9d; + content: "\0002f"; } + html.theme--documenter-dark .breadcrumb ul, + html.theme--documenter-dark .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + html.theme--documenter-dark .breadcrumb .icon:first-child { + margin-right: 0.5em; } + html.theme--documenter-dark .breadcrumb .icon:last-child { + margin-left: 0.5em; } + html.theme--documenter-dark .breadcrumb.is-centered ol, + html.theme--documenter-dark .breadcrumb.is-centered ul { + justify-content: center; } + html.theme--documenter-dark .breadcrumb.is-right ol, + html.theme--documenter-dark .breadcrumb.is-right ul { + justify-content: flex-end; } + html.theme--documenter-dark .breadcrumb.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.85em; } + html.theme--documenter-dark .breadcrumb.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .breadcrumb.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + html.theme--documenter-dark .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + html.theme--documenter-dark .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + html.theme--documenter-dark .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + html.theme--documenter-dark .card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #fff; + max-width: 100%; + position: relative; } + html.theme--documenter-dark .card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + html.theme--documenter-dark .card-header-title { + align-items: center; + color: #f2f2f2; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + html.theme--documenter-dark .card-header-title.is-centered { + justify-content: center; } + html.theme--documenter-dark .card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + html.theme--documenter-dark .card-image { + display: block; + position: relative; } + html.theme--documenter-dark .card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + html.theme--documenter-dark .card-footer { + background-color: transparent; + border-top: 1px solid #5e6d6f; + align-items: stretch; + display: flex; } + html.theme--documenter-dark .card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + html.theme--documenter-dark .card-footer-item:not(:last-child) { + border-right: 1px solid #5e6d6f; } + html.theme--documenter-dark .card .media:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + html.theme--documenter-dark .dropdown.is-active .dropdown-menu, html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + html.theme--documenter-dark .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + html.theme--documenter-dark .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + html.theme--documenter-dark .dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + html.theme--documenter-dark .dropdown-content { + background-color: #282f2f; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + html.theme--documenter-dark .dropdown-item { + color: #fff; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + html.theme--documenter-dark a.dropdown-item, + html.theme--documenter-dark button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + html.theme--documenter-dark a.dropdown-item:hover, + html.theme--documenter-dark button.dropdown-item:hover { + background-color: #282f2f; + color: #0a0a0a; } + html.theme--documenter-dark a.dropdown-item.is-active, + html.theme--documenter-dark button.dropdown-item.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .dropdown-divider { + background-color: #5e6d6f; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + html.theme--documenter-dark .level { + align-items: center; + justify-content: space-between; } + html.theme--documenter-dark .level code { + border-radius: 0.4em; } + html.theme--documenter-dark .level img { + display: inline-block; + vertical-align: top; } + html.theme--documenter-dark .level.is-mobile { + display: flex; } + html.theme--documenter-dark .level.is-mobile .level-left, + html.theme--documenter-dark .level.is-mobile .level-right { + display: flex; } + html.theme--documenter-dark .level.is-mobile .level-left + .level-right { + margin-top: 0; } + html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level { + display: flex; } + html.theme--documenter-dark .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + html.theme--documenter-dark .level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + html.theme--documenter-dark .level-item .title, + html.theme--documenter-dark .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + html.theme--documenter-dark .level-left, + html.theme--documenter-dark .level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .level-left .level-item.is-flexible, + html.theme--documenter-dark .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-left .level-item:not(:last-child), + html.theme--documenter-dark .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + html.theme--documenter-dark .level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-left { + display: flex; } } + html.theme--documenter-dark .level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .level-right { + display: flex; } } + html.theme--documenter-dark .list { + background-color: white; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .list-item { + display: block; + padding: 0.5em 1em; } + html.theme--documenter-dark .list-item:not(a) { + color: #fff; } + html.theme--documenter-dark .list-item:first-child { + border-top-left-radius: 0.4em; + border-top-right-radius: 0.4em; } + html.theme--documenter-dark .list-item:last-child { + border-bottom-left-radius: 0.4em; + border-bottom-right-radius: 0.4em; } + html.theme--documenter-dark .list-item:not(:last-child) { + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .list-item.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark a.list-item { + background-color: #282f2f; + cursor: pointer; } + html.theme--documenter-dark .media { + align-items: flex-start; + display: flex; + text-align: left; } + html.theme--documenter-dark .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .media .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + display: flex; + padding-top: 0.75rem; } + html.theme--documenter-dark .media .media .content:not(:last-child), + html.theme--documenter-dark .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .media .media .media { + padding-top: 0.5rem; } + html.theme--documenter-dark .media .media .media + .media { + margin-top: 0.5rem; } + html.theme--documenter-dark .media + .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + html.theme--documenter-dark .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + html.theme--documenter-dark .media-left, + html.theme--documenter-dark .media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .media-left { + margin-right: 1rem; } + html.theme--documenter-dark .media-right { + margin-left: 1rem; } + html.theme--documenter-dark .media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .media-content { + overflow-x: auto; } } + html.theme--documenter-dark .menu { + font-size: 15px; } + html.theme--documenter-dark .menu.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.85em; } + html.theme--documenter-dark .menu.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .menu.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .menu-list { + line-height: 1.25; } + html.theme--documenter-dark .menu-list a { + border-radius: 3px; + color: #fff; + display: block; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .menu-list a:hover { + background-color: #282f2f; + color: #f2f2f2; } + html.theme--documenter-dark .menu-list a.is-active { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .menu-list li ul { + border-left: 1px solid #5e6d6f; + margin: 0.75em; + padding-left: 0.75em; } + html.theme--documenter-dark .menu-label { + color: white; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + html.theme--documenter-dark .menu-label:not(:first-child) { + margin-top: 1em; } + html.theme--documenter-dark .menu-label:not(:last-child) { + margin-bottom: 1em; } + html.theme--documenter-dark .message { + background-color: #282f2f; + border-radius: 0.4em; + font-size: 15px; } + html.theme--documenter-dark .message strong { + color: currentColor; } + html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + html.theme--documenter-dark .message.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.85em; } + html.theme--documenter-dark .message.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .message.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .message.is-white { + background-color: white; } + html.theme--documenter-dark .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + html.theme--documenter-dark .message.is-black { + background-color: #fafafa; } + html.theme--documenter-dark .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + html.theme--documenter-dark .message.is-light { + background-color: #f9fafb; } + html.theme--documenter-dark .message.is-light .message-header { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .message.is-light .message-body { + border-color: #ecf0f1; + color: #505050; } + html.theme--documenter-dark .message.is-dark, html.theme--documenter-dark .content kbd.message { + background-color: #f9fafa; } + html.theme--documenter-dark .message.is-dark .message-header, html.theme--documenter-dark .content kbd.message .message-header { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .message.is-dark .message-body, html.theme--documenter-dark .content kbd.message .message-body { + border-color: #282f2f; + color: #212526; } + html.theme--documenter-dark .message.is-primary, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink { + background-color: #f8fafc; } + html.theme--documenter-dark .message.is-primary .message-header, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .message.is-primary .message-body, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #375a7f; + color: #2b4159; } + html.theme--documenter-dark .message.is-link { + background-color: #f6fefc; } + html.theme--documenter-dark .message.is-link .message-header { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .message.is-link .message-body { + border-color: #1abc9c; + color: #0b2f28; } + html.theme--documenter-dark .message.is-info { + background-color: #f5fbff; } + html.theme--documenter-dark .message.is-info .message-header { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .message.is-info .message-body { + border-color: #024c7d; + color: #033659; } + html.theme--documenter-dark .message.is-success { + background-color: #f5fff9; } + html.theme--documenter-dark .message.is-success .message-header { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .message.is-success .message-body { + border-color: #008438; + color: #023518; } + html.theme--documenter-dark .message.is-warning { + background-color: #fffcf5; } + html.theme--documenter-dark .message.is-warning .message-header { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .message.is-warning .message-body { + border-color: #ad8100; + color: #3d2e03; } + html.theme--documenter-dark .message.is-danger { + background-color: #fef6f6; } + html.theme--documenter-dark .message.is-danger .message-header { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .message.is-danger .message-body { + border-color: #9e1b0d; + color: #7a170c; } + html.theme--documenter-dark .message-header { + align-items: center; + background-color: #fff; + border-radius: 0.4em 0.4em 0 0; + color: rgba(0, 0, 0, 0.7); + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + html.theme--documenter-dark .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + html.theme--documenter-dark .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .message-body { + border-color: #5e6d6f; + border-radius: 0.4em; + border-style: solid; + border-width: 0 0 0 4px; + color: #fff; + padding: 1em 1.25em; } + html.theme--documenter-dark .message-body code, + html.theme--documenter-dark .message-body pre { + background-color: white; } + html.theme--documenter-dark .message-body pre code { + background-color: transparent; } + html.theme--documenter-dark .modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + html.theme--documenter-dark .modal.is-active { + display: flex; } + html.theme--documenter-dark .modal-background { + background-color: rgba(10, 10, 10, 0.86); } + html.theme--documenter-dark .modal-content, + html.theme--documenter-dark .modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .modal-content, + html.theme--documenter-dark .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + html.theme--documenter-dark .modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + html.theme--documenter-dark .modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + html.theme--documenter-dark .modal-card-head, + html.theme--documenter-dark .modal-card-foot { + align-items: center; + background-color: #282f2f; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + html.theme--documenter-dark .modal-card-head { + border-bottom: 1px solid #5e6d6f; + border-top-left-radius: 8px; + border-top-right-radius: 8px; } + html.theme--documenter-dark .modal-card-title { + color: #f2f2f2; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + html.theme--documenter-dark .modal-card-foot { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + html.theme--documenter-dark .modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + html.theme--documenter-dark .navbar { + background-color: #375a7f; + min-height: 4rem; + position: relative; + z-index: 30; } + html.theme--documenter-dark .navbar.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-white .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + html.theme--documenter-dark .navbar.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link { + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-black .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link { + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + html.theme--documenter-dark .navbar.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link { + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-burger { + color: #282f2f; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-light .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link { + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after { + border-color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: #ecf0f1; + color: #282f2f; } } + html.theme--documenter-dark .navbar.is-dark, html.theme--documenter-dark .content kbd.navbar { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link { + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-burger, html.theme--documenter-dark .content kbd.navbar .navbar-burger { + color: #ecf0f1; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-dark .navbar-start > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-end > .navbar-item, + html.theme--documenter-dark .content kbd.navbar .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link { + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after, + html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after { + border-color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #282f2f; + color: #ecf0f1; } } + html.theme--documenter-dark .navbar.is-primary, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-burger, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-primary .navbar-start > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-end > .navbar-item, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #375a7f; + color: #fff; } } + html.theme--documenter-dark .navbar.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-link .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; + color: #fff; } } + html.theme--documenter-dark .navbar.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-info .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #024c7d; + color: #fff; } } + html.theme--documenter-dark .navbar.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-success .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #008438; + color: #fff; } } + html.theme--documenter-dark .navbar.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-warning .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ad8100; + color: #fff; } } + html.theme--documenter-dark .navbar.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar.is-danger .navbar-start > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-end > .navbar-item, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after, + html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #9e1b0d; + color: #fff; } } + html.theme--documenter-dark .navbar > .container { + align-items: stretch; + display: flex; + min-height: 4rem; + width: 100%; } + html.theme--documenter-dark .navbar.has-shadow { + box-shadow: 0 2px 0 0 #282f2f; } + html.theme--documenter-dark .navbar.is-fixed-bottom, html.theme--documenter-dark .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 #282f2f; } + html.theme--documenter-dark .navbar.is-fixed-top { + top: 0; } + html.theme--documenter-dark html.has-navbar-fixed-top, + html.theme--documenter-dark body.has-navbar-fixed-top { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom, + html.theme--documenter-dark body.has-navbar-fixed-bottom { + padding-bottom: 4rem; } + html.theme--documenter-dark .navbar-brand, + html.theme--documenter-dark .navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 4rem; } + html.theme--documenter-dark .navbar-brand a.navbar-item:focus, html.theme--documenter-dark .navbar-brand a.navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + html.theme--documenter-dark .navbar-burger { + color: #fff; + cursor: pointer; + display: block; + height: 4rem; + position: relative; + width: 4rem; + margin-left: auto; } + html.theme--documenter-dark .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + html.theme--documenter-dark .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + html.theme--documenter-dark .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + html.theme--documenter-dark .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + html.theme--documenter-dark .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + html.theme--documenter-dark .navbar-menu { + display: none; } + html.theme--documenter-dark .navbar-item, + html.theme--documenter-dark .navbar-link { + color: #fff; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .navbar-item .icon:only-child, + html.theme--documenter-dark .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + html.theme--documenter-dark a.navbar-item, + html.theme--documenter-dark .navbar-link { + cursor: pointer; } + html.theme--documenter-dark a.navbar-item:focus, html.theme--documenter-dark a.navbar-item:focus-within, html.theme--documenter-dark a.navbar-item:hover, html.theme--documenter-dark a.navbar-item.is-active, + html.theme--documenter-dark .navbar-link:focus, + html.theme--documenter-dark .navbar-link:focus-within, + html.theme--documenter-dark .navbar-link:hover, + html.theme--documenter-dark .navbar-link.is-active { + background-color: transparent; + color: #1abc9c; } + html.theme--documenter-dark .navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .navbar-item img { + max-height: 1.75rem; } + html.theme--documenter-dark .navbar-item.has-dropdown { + padding: 0; } + html.theme--documenter-dark .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 4rem; + padding-bottom: calc(0.5rem - 1px); } + html.theme--documenter-dark .navbar-item.is-tab:focus, html.theme--documenter-dark .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #1abc9c; } + html.theme--documenter-dark .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #1abc9c; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #1abc9c; + padding-bottom: calc(0.5rem - 3px); } + html.theme--documenter-dark .navbar-content { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after { + border-color: #fff; + margin-top: -0.375em; + right: 1.125em; } + html.theme--documenter-dark .navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + html.theme--documenter-dark .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + html.theme--documenter-dark .navbar-divider { + background-color: rgba(0, 0, 0, 0.2); + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .navbar > .container { + display: block; } + html.theme--documenter-dark .navbar-brand .navbar-item, + html.theme--documenter-dark .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + html.theme--documenter-dark .navbar-link::after { + display: none; } + html.theme--documenter-dark .navbar-menu { + background-color: #375a7f; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + html.theme--documenter-dark .navbar-menu.is-active { + display: block; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch, html.theme--documenter-dark .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .navbar.is-fixed-top-touch { + top: 0; } + html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu, html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 4rem); + overflow: auto; } + html.theme--documenter-dark html.has-navbar-fixed-top-touch, + html.theme--documenter-dark body.has-navbar-fixed-top-touch { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom-touch, + html.theme--documenter-dark body.has-navbar-fixed-bottom-touch { + padding-bottom: 4rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .navbar, + html.theme--documenter-dark .navbar-menu, + html.theme--documenter-dark .navbar-start, + html.theme--documenter-dark .navbar-end { + align-items: stretch; + display: flex; } + html.theme--documenter-dark .navbar { + min-height: 4rem; } + html.theme--documenter-dark .navbar.is-spaced { + padding: 1rem 2rem; } + html.theme--documenter-dark .navbar.is-spaced .navbar-start, + html.theme--documenter-dark .navbar.is-spaced .navbar-end { + align-items: center; } + html.theme--documenter-dark .navbar.is-spaced a.navbar-item, + html.theme--documenter-dark .navbar.is-spaced .navbar-link { + border-radius: 0.4em; } + html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover, html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active, + html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus, + html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover, + html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + html.theme--documenter-dark .navbar-burger { + display: none; } + html.theme--documenter-dark .navbar-item, + html.theme--documenter-dark .navbar-link { + align-items: center; + display: flex; } + html.theme--documenter-dark .navbar-item { + display: flex; } + html.theme--documenter-dark .navbar-item.has-dropdown { + align-items: stretch; } + html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 8px 8px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + html.theme--documenter-dark .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .navbar-start { + justify-content: flex-start; + margin-right: auto; } + html.theme--documenter-dark .navbar-end { + justify-content: flex-end; + margin-left: auto; } + html.theme--documenter-dark .navbar-dropdown { + background-color: #375a7f; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + html.theme--documenter-dark .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + .navbar.is-spaced html.theme--documenter-dark .navbar-dropdown, html.theme--documenter-dark .navbar-dropdown.is-boxed { + border-radius: 8px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + html.theme--documenter-dark .navbar-dropdown.is-right { + left: auto; + right: 0; } + html.theme--documenter-dark .navbar-divider { + display: block; } + html.theme--documenter-dark .navbar > .container .navbar-brand, + html.theme--documenter-dark .container > .navbar .navbar-brand { + margin-left: -.75rem; } + html.theme--documenter-dark .navbar > .container .navbar-menu, + html.theme--documenter-dark .container > .navbar .navbar-menu { + margin-right: -.75rem; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop, html.theme--documenter-dark .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop { + bottom: 0; } + html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .navbar.is-fixed-top-desktop { + top: 0; } + html.theme--documenter-dark html.has-navbar-fixed-top-desktop, + html.theme--documenter-dark body.has-navbar-fixed-top-desktop { + padding-top: 4rem; } + html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop, + html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop { + padding-bottom: 4rem; } + html.theme--documenter-dark html.has-spaced-navbar-fixed-top, + html.theme--documenter-dark body.has-spaced-navbar-fixed-top { + padding-top: 6rem; } + html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom, + html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom { + padding-bottom: 6rem; } + html.theme--documenter-dark a.navbar-item.is-active, + html.theme--documenter-dark .navbar-link.is-active { + color: #1abc9c; } + html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover), + html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link { + background-color: transparent; } } + html.theme--documenter-dark .hero.is-fullheight-with-navbar { + min-height: calc(100vh - 4rem); } + html.theme--documenter-dark .pagination { + font-size: 15px; + margin: -0.25rem; } + html.theme--documenter-dark .pagination.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.85em; } + html.theme--documenter-dark .pagination.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .pagination.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .pagination.is-rounded .pagination-previous, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + html.theme--documenter-dark .pagination.is-rounded .pagination-next, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + html.theme--documenter-dark .pagination.is-rounded .pagination-link, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + html.theme--documenter-dark .pagination, + html.theme--documenter-dark .pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-link { + border-color: #5e6d6f; + color: #1abc9c; + min-width: 2.25em; } + html.theme--documenter-dark .pagination-previous:hover, + html.theme--documenter-dark .pagination-next:hover, + html.theme--documenter-dark .pagination-link:hover { + border-color: #8c9b9d; + color: #1dd2af; } + html.theme--documenter-dark .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus { + border-color: #8c9b9d; } + html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled] { + background-color: #dbdee0; + border-color: #dbdee0; + box-shadow: none; + color: #5e6d6f; + opacity: 0.5; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + html.theme--documenter-dark .pagination-link.is-current { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .pagination-ellipsis { + color: #8c9b9d; + pointer-events: none; } + html.theme--documenter-dark .pagination-list { + flex-wrap: wrap; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .pagination { + flex-wrap: wrap; } + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + html.theme--documenter-dark .pagination-previous { + order: 2; } + html.theme--documenter-dark .pagination-next { + order: 3; } + html.theme--documenter-dark .pagination { + justify-content: space-between; } + html.theme--documenter-dark .pagination.is-centered .pagination-previous { + order: 1; } + html.theme--documenter-dark .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + html.theme--documenter-dark .pagination.is-centered .pagination-next { + order: 3; } + html.theme--documenter-dark .pagination.is-right .pagination-previous { + order: 1; } + html.theme--documenter-dark .pagination.is-right .pagination-next { + order: 2; } + html.theme--documenter-dark .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + html.theme--documenter-dark .panel { + font-size: 15px; } + html.theme--documenter-dark .panel:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .panel-heading, + html.theme--documenter-dark .panel-tabs, + html.theme--documenter-dark .panel-block { + border-bottom: 1px solid #5e6d6f; + border-left: 1px solid #5e6d6f; + border-right: 1px solid #5e6d6f; } + html.theme--documenter-dark .panel-heading:first-child, + html.theme--documenter-dark .panel-tabs:first-child, + html.theme--documenter-dark .panel-block:first-child { + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark .panel-heading { + background-color: #282f2f; + border-radius: 0.4em 0.4em 0 0; + color: #f2f2f2; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + html.theme--documenter-dark .panel-tabs a { + border-bottom: 1px solid #5e6d6f; + margin-bottom: -1px; + padding: 0.5em; } + html.theme--documenter-dark .panel-tabs a.is-active { + border-bottom-color: #343c3d; + color: #17a689; } + html.theme--documenter-dark .panel-list a { + color: #fff; } + html.theme--documenter-dark .panel-list a:hover { + color: #1abc9c; } + html.theme--documenter-dark .panel-block { + align-items: center; + color: #f2f2f2; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + html.theme--documenter-dark .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + html.theme--documenter-dark .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + html.theme--documenter-dark .panel-block.is-wrapped { + flex-wrap: wrap; } + html.theme--documenter-dark .panel-block.is-active { + border-left-color: #1abc9c; + color: #17a689; } + html.theme--documenter-dark .panel-block.is-active .panel-icon { + color: #1abc9c; } + html.theme--documenter-dark a.panel-block, + html.theme--documenter-dark label.panel-block { + cursor: pointer; } + html.theme--documenter-dark a.panel-block:hover, + html.theme--documenter-dark label.panel-block:hover { + background-color: #282f2f; } + html.theme--documenter-dark .panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: white; + margin-right: 0.75em; } + html.theme--documenter-dark .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + html.theme--documenter-dark .tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 15px; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + html.theme--documenter-dark .tabs a { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #fff; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + html.theme--documenter-dark .tabs a:hover { + border-bottom-color: #f2f2f2; + color: #f2f2f2; } + html.theme--documenter-dark .tabs li { + display: block; } + html.theme--documenter-dark .tabs li.is-active a { + border-bottom-color: #1abc9c; + color: #1abc9c; } + html.theme--documenter-dark .tabs ul { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + html.theme--documenter-dark .tabs ul.is-left { + padding-right: 0.75em; } + html.theme--documenter-dark .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + html.theme--documenter-dark .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + html.theme--documenter-dark .tabs .icon:first-child { + margin-right: 0.5em; } + html.theme--documenter-dark .tabs .icon:last-child { + margin-left: 0.5em; } + html.theme--documenter-dark .tabs.is-centered ul { + justify-content: center; } + html.theme--documenter-dark .tabs.is-right ul { + justify-content: flex-end; } + html.theme--documenter-dark .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .tabs.is-boxed a:hover { + background-color: #282f2f; + border-bottom-color: #5e6d6f; } + html.theme--documenter-dark .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #5e6d6f; + border-bottom-color: transparent !important; } + html.theme--documenter-dark .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .tabs.is-toggle a { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + html.theme--documenter-dark .tabs.is-toggle a:hover { + background-color: #282f2f; + border-color: #8c9b9d; + z-index: 2; } + html.theme--documenter-dark .tabs.is-toggle li + li { + margin-left: -1px; } + html.theme--documenter-dark .tabs.is-toggle li:first-child a { + border-radius: 0.4em 0 0 0.4em; } + html.theme--documenter-dark .tabs.is-toggle li:last-child a { + border-radius: 0 0.4em 0.4em 0; } + html.theme--documenter-dark .tabs.is-toggle li.is-active a { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; + z-index: 1; } + html.theme--documenter-dark .tabs.is-toggle ul { + border-bottom: none; } + html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + html.theme--documenter-dark .tabs.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.85em; } + html.theme--documenter-dark .tabs.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .tabs.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > html.theme--documenter-dark .column.is-narrow { + flex: none; } + .columns.is-mobile > html.theme--documenter-dark .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .column.is-narrow-mobile { + flex: none; } + html.theme--documenter-dark .column.is-full-mobile { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-mobile { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-mobile { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-mobile { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-mobile { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-mobile { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-mobile { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-mobile { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-mobile { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-mobile { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-mobile { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-mobile { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-mobile { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-mobile { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-mobile { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-mobile { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .column.is-narrow, html.theme--documenter-dark .column.is-narrow-tablet { + flex: none; } + html.theme--documenter-dark .column.is-full, html.theme--documenter-dark .column.is-full-tablet { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters, html.theme--documenter-dark .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds, html.theme--documenter-dark .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half, html.theme--documenter-dark .column.is-half-tablet { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third, html.theme--documenter-dark .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter, html.theme--documenter-dark .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth, html.theme--documenter-dark .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths, html.theme--documenter-dark .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths, html.theme--documenter-dark .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths, html.theme--documenter-dark .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters, html.theme--documenter-dark .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds, html.theme--documenter-dark .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half, html.theme--documenter-dark .column.is-offset-half-tablet { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third, html.theme--documenter-dark .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter, html.theme--documenter-dark .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth, html.theme--documenter-dark .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths, html.theme--documenter-dark .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths, html.theme--documenter-dark .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths, html.theme--documenter-dark .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0, html.theme--documenter-dark .column.is-0-tablet { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0, html.theme--documenter-dark .column.is-offset-0-tablet { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1, html.theme--documenter-dark .column.is-1-tablet { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3, html.theme--documenter-dark .column.is-3-tablet { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3, html.theme--documenter-dark .column.is-offset-3-tablet { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4, html.theme--documenter-dark .column.is-4-tablet { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6, html.theme--documenter-dark .column.is-6-tablet { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6, html.theme--documenter-dark .column.is-offset-6-tablet { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7, html.theme--documenter-dark .column.is-7-tablet { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9, html.theme--documenter-dark .column.is-9-tablet { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9, html.theme--documenter-dark .column.is-offset-9-tablet { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10, html.theme--documenter-dark .column.is-10-tablet { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12, html.theme--documenter-dark .column.is-12-tablet { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12, html.theme--documenter-dark .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .column.is-narrow-touch { + flex: none; } + html.theme--documenter-dark .column.is-full-touch { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-touch { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-touch { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-touch { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-touch { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-touch { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-touch { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-touch { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-touch { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-touch { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-touch { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-touch { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-touch { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-touch { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-touch { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-touch { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-touch { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-touch { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-touch { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-touch { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-touch { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-touch { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-touch { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-touch { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-touch { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-touch { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-touch { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-touch { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .column.is-narrow-desktop { + flex: none; } + html.theme--documenter-dark .column.is-full-desktop { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-desktop { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-desktop { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-desktop { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-desktop { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-desktop { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-desktop { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-desktop { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-desktop { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-desktop { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-desktop { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-desktop { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-desktop { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-desktop { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-desktop { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-desktop { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .column.is-narrow-widescreen { + flex: none; } + html.theme--documenter-dark .column.is-full-widescreen { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-widescreen { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-widescreen { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-widescreen { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-widescreen { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-widescreen { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-widescreen { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-widescreen { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-widescreen { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-widescreen { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-widescreen { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-widescreen { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .column.is-narrow-fullhd { + flex: none; } + html.theme--documenter-dark .column.is-full-fullhd { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + html.theme--documenter-dark .column.is-half-fullhd { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + html.theme--documenter-dark .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + html.theme--documenter-dark .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + html.theme--documenter-dark .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + html.theme--documenter-dark .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + html.theme--documenter-dark .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + html.theme--documenter-dark .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + html.theme--documenter-dark .column.is-offset-half-fullhd { + margin-left: 50%; } + html.theme--documenter-dark .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + html.theme--documenter-dark .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + html.theme--documenter-dark .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + html.theme--documenter-dark .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + html.theme--documenter-dark .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + html.theme--documenter-dark .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + html.theme--documenter-dark .column.is-0-fullhd { + flex: none; + width: 0%; } + html.theme--documenter-dark .column.is-offset-0-fullhd { + margin-left: 0%; } + html.theme--documenter-dark .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + html.theme--documenter-dark .column.is-3-fullhd { + flex: none; + width: 25%; } + html.theme--documenter-dark .column.is-offset-3-fullhd { + margin-left: 25%; } + html.theme--documenter-dark .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + html.theme--documenter-dark .column.is-6-fullhd { + flex: none; + width: 50%; } + html.theme--documenter-dark .column.is-offset-6-fullhd { + margin-left: 50%; } + html.theme--documenter-dark .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + html.theme--documenter-dark .column.is-9-fullhd { + flex: none; + width: 75%; } + html.theme--documenter-dark .column.is-offset-9-fullhd { + margin-left: 75%; } + html.theme--documenter-dark .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + html.theme--documenter-dark .column.is-12-fullhd { + flex: none; + width: 100%; } + html.theme--documenter-dark .column.is-offset-12-fullhd { + margin-left: 100%; } } + html.theme--documenter-dark .columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + html.theme--documenter-dark .columns:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + html.theme--documenter-dark .columns.is-centered { + justify-content: center; } + html.theme--documenter-dark .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + html.theme--documenter-dark .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + html.theme--documenter-dark .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + html.theme--documenter-dark .columns.is-gapless:last-child { + margin-bottom: 0; } + html.theme--documenter-dark .columns.is-mobile { + display: flex; } + html.theme--documenter-dark .columns.is-multiline { + flex-wrap: wrap; } + html.theme--documenter-dark .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-desktop { + display: flex; } } + html.theme--documenter-dark .columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + html.theme--documenter-dark .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + html.theme--documenter-dark .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + html.theme--documenter-dark .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + html.theme--documenter-dark .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + html.theme--documenter-dark .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + html.theme--documenter-dark .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + html.theme--documenter-dark .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + html.theme--documenter-dark .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + html.theme--documenter-dark .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + html.theme--documenter-dark .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + html.theme--documenter-dark .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + html.theme--documenter-dark .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + html.theme--documenter-dark .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + html.theme--documenter-dark .tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + html.theme--documenter-dark .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + html.theme--documenter-dark .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + html.theme--documenter-dark .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + html.theme--documenter-dark .tile.is-child { + margin: 0 !important; } + html.theme--documenter-dark .tile.is-parent { + padding: 0.75rem; } + html.theme--documenter-dark .tile.is-vertical { + flex-direction: column; } + html.theme--documenter-dark .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .tile:not(.is-child) { + display: flex; } + html.theme--documenter-dark .tile.is-1 { + flex: none; + width: 8.33333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.66667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.33333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.66667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.33333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.66667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.33333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.66667%; } + html.theme--documenter-dark .tile.is-12 { + flex: none; + width: 100%; } } + html.theme--documenter-dark .hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + html.theme--documenter-dark .hero .navbar { + background: none; } + html.theme--documenter-dark .hero .tabs ul { + border-bottom: none; } + html.theme--documenter-dark .hero.is-white { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-white strong { + color: inherit; } + html.theme--documenter-dark .hero.is-white .title { + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + html.theme--documenter-dark .hero.is-white .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-white .navbar-menu { + background-color: white; } } + html.theme--documenter-dark .hero.is-white .navbar-item, + html.theme--documenter-dark .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + html.theme--documenter-dark .hero.is-white a.navbar-item:hover, html.theme--documenter-dark .hero.is-white a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-white .navbar-link:hover, + html.theme--documenter-dark .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-white .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-white .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + html.theme--documenter-dark .hero.is-black { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-black strong { + color: inherit; } + html.theme--documenter-dark .hero.is-black .title { + color: white; } + html.theme--documenter-dark .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-black .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + html.theme--documenter-dark .hero.is-black .navbar-item, + html.theme--documenter-dark .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-black a.navbar-item:hover, html.theme--documenter-dark .hero.is-black a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-black .navbar-link:hover, + html.theme--documenter-dark .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + html.theme--documenter-dark .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-black .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-black .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a { + color: white; } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + html.theme--documenter-dark .hero.is-light { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-light strong { + color: inherit; } + html.theme--documenter-dark .hero.is-light .title { + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .subtitle { + color: rgba(40, 47, 47, 0.9); } + html.theme--documenter-dark .hero.is-light .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-light .subtitle strong { + color: #282f2f; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-light .navbar-menu { + background-color: #ecf0f1; } } + html.theme--documenter-dark .hero.is-light .navbar-item, + html.theme--documenter-dark .hero.is-light .navbar-link { + color: rgba(40, 47, 47, 0.7); } + html.theme--documenter-dark .hero.is-light a.navbar-item:hover, html.theme--documenter-dark .hero.is-light a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-light .navbar-link:hover, + html.theme--documenter-dark .hero.is-light .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .tabs a { + color: #282f2f; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-light .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-light .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a { + color: #282f2f; } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } } + html.theme--documenter-dark .hero.is-dark, html.theme--documenter-dark .content kbd.hero { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-dark strong, + html.theme--documenter-dark .content kbd.hero strong { + color: inherit; } + html.theme--documenter-dark .hero.is-dark .title, html.theme--documenter-dark .content kbd.hero .title { + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .subtitle, html.theme--documenter-dark .content kbd.hero .subtitle { + color: rgba(236, 240, 241, 0.9); } + html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button), html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-dark .subtitle strong, + html.theme--documenter-dark .content kbd.hero .subtitle strong { + color: #ecf0f1; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-dark .navbar-menu, html.theme--documenter-dark .content kbd.hero .navbar-menu { + background-color: #282f2f; } } + html.theme--documenter-dark .hero.is-dark .navbar-item, html.theme--documenter-dark .content kbd.hero .navbar-item, + html.theme--documenter-dark .hero.is-dark .navbar-link, + html.theme--documenter-dark .content kbd.hero .navbar-link { + color: rgba(236, 240, 241, 0.7); } + html.theme--documenter-dark .hero.is-dark a.navbar-item:hover, html.theme--documenter-dark .content kbd.hero a.navbar-item:hover, html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active, html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-dark .navbar-link:hover, + html.theme--documenter-dark .content kbd.hero .navbar-link:hover, + html.theme--documenter-dark .hero.is-dark .navbar-link.is-active, + html.theme--documenter-dark .content kbd.hero .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .tabs a, html.theme--documenter-dark .content kbd.hero .tabs a { + color: #ecf0f1; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-dark .tabs a:hover, html.theme--documenter-dark .content kbd.hero .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-dark .tabs li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a { + color: #ecf0f1; } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .hero.is-dark.is-bold, html.theme--documenter-dark .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu, html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } } + html.theme--documenter-dark .hero.is-primary, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-primary strong, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + html.theme--documenter-dark .hero.is-primary .title, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + html.theme--documenter-dark .hero.is-primary .subtitle, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-primary .subtitle strong, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-primary .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #375a7f; } } + html.theme--documenter-dark .hero.is-primary .navbar-item, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-item, + html.theme--documenter-dark .hero.is-primary .navbar-link, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-primary a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-primary .navbar-link:hover, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + html.theme--documenter-dark .hero.is-primary .navbar-link.is-active, + html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + html.theme--documenter-dark .hero.is-primary .tabs a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-primary .tabs a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-primary .tabs li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #1abc9c; } + html.theme--documenter-dark .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } } + html.theme--documenter-dark .hero.is-info { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-info strong { + color: inherit; } + html.theme--documenter-dark .hero.is-info .title { + color: #fff; } + html.theme--documenter-dark .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-info .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-info .navbar-menu { + background-color: #024c7d; } } + html.theme--documenter-dark .hero.is-info .navbar-item, + html.theme--documenter-dark .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-info a.navbar-item:hover, html.theme--documenter-dark .hero.is-info a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-info .navbar-link:hover, + html.theme--documenter-dark .hero.is-info .navbar-link.is-active { + background-color: #023d64; + color: #fff; } + html.theme--documenter-dark .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-info .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-info .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #024c7d; } + html.theme--documenter-dark .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%); } } + html.theme--documenter-dark .hero.is-success { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-success strong { + color: inherit; } + html.theme--documenter-dark .hero.is-success .title { + color: #fff; } + html.theme--documenter-dark .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-success .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-success .navbar-menu { + background-color: #008438; } } + html.theme--documenter-dark .hero.is-success .navbar-item, + html.theme--documenter-dark .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-success a.navbar-item:hover, html.theme--documenter-dark .hero.is-success a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-success .navbar-link:hover, + html.theme--documenter-dark .hero.is-success .navbar-link.is-active { + background-color: #006b2d; + color: #fff; } + html.theme--documenter-dark .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-success .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-success .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #008438; } + html.theme--documenter-dark .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%); } } + html.theme--documenter-dark .hero.is-warning { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-warning strong { + color: inherit; } + html.theme--documenter-dark .hero.is-warning .title { + color: #fff; } + html.theme--documenter-dark .hero.is-warning .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-warning .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-warning .navbar-menu { + background-color: #ad8100; } } + html.theme--documenter-dark .hero.is-warning .navbar-item, + html.theme--documenter-dark .hero.is-warning .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-warning a.navbar-item:hover, html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-warning .navbar-link:hover, + html.theme--documenter-dark .hero.is-warning .navbar-link.is-active { + background-color: #946e00; + color: #fff; } + html.theme--documenter-dark .hero.is-warning .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-warning .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-warning .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #ad8100; } + html.theme--documenter-dark .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%); } } + html.theme--documenter-dark .hero.is-danger { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-danger strong { + color: inherit; } + html.theme--documenter-dark .hero.is-danger .title { + color: #fff; } + html.theme--documenter-dark .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-danger .navbar-menu { + background-color: #9e1b0d; } } + html.theme--documenter-dark .hero.is-danger .navbar-item, + html.theme--documenter-dark .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-danger a.navbar-item:hover, html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-danger .navbar-link:hover, + html.theme--documenter-dark .hero.is-danger .navbar-link.is-active { + background-color: #86170b; + color: #fff; } + html.theme--documenter-dark .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-danger .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-danger .tabs li.is-active a { + opacity: 1; } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a { + color: #fff; } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #9e1b0d; } + html.theme--documenter-dark .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%); } } + html.theme--documenter-dark .hero.is-small .hero-body, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + html.theme--documenter-dark .hero.is-halfheight .hero-body, html.theme--documenter-dark .hero.is-fullheight .hero-body, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + html.theme--documenter-dark .hero.is-halfheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .hero.is-halfheight { + min-height: 50vh; } + html.theme--documenter-dark .hero.is-fullheight { + min-height: 100vh; } + html.theme--documenter-dark .hero-video { + overflow: hidden; } + html.theme--documenter-dark .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + html.theme--documenter-dark .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero-video { + display: none; } } + html.theme--documenter-dark .hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero-buttons .button { + display: flex; } + html.theme--documenter-dark .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + html.theme--documenter-dark .hero-buttons { + display: flex; + justify-content: center; } + html.theme--documenter-dark .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + html.theme--documenter-dark .hero-head, + html.theme--documenter-dark .hero-foot { + flex-grow: 0; + flex-shrink: 0; } + html.theme--documenter-dark .hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + html.theme--documenter-dark .section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark .section.is-medium { + padding: 9rem 1.5rem; } + html.theme--documenter-dark .section.is-large { + padding: 18rem 1.5rem; } } + html.theme--documenter-dark .footer { + background-color: #282f2f; + padding: 3rem 1.5rem 6rem; } + html.theme--documenter-dark hr { + height: 1px; } + html.theme--documenter-dark h6 { + text-transform: uppercase; + letter-spacing: 0.5px; } + html.theme--documenter-dark .hero { + background-color: #343c3d; } + html.theme--documenter-dark a { + transition: all 200ms ease; } + html.theme--documenter-dark .button { + transition: all 200ms ease; + border-width: 1px; + color: white; } + html.theme--documenter-dark .button.is-active, html.theme--documenter-dark .button.is-focused, html.theme--documenter-dark .button:active, html.theme--documenter-dark .button:focus { + box-shadow: 0 0 0 2px rgba(140, 155, 157, 0.5); } + html.theme--documenter-dark .button.is-white.is-hovered, html.theme--documenter-dark .button.is-white:hover { + background-color: white; } + html.theme--documenter-dark .button.is-white.is-active, html.theme--documenter-dark .button.is-white.is-focused, html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white:focus { + border-color: white; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); } + html.theme--documenter-dark .button.is-black.is-hovered, html.theme--documenter-dark .button.is-black:hover { + background-color: #1d1d1d; } + html.theme--documenter-dark .button.is-black.is-active, html.theme--documenter-dark .button.is-black.is-focused, html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black:focus { + border-color: #0a0a0a; + box-shadow: 0 0 0 2px rgba(10, 10, 10, 0.5); } + html.theme--documenter-dark .button.is-light.is-hovered, html.theme--documenter-dark .button.is-light:hover { + background-color: white; } + html.theme--documenter-dark .button.is-light.is-active, html.theme--documenter-dark .button.is-light.is-focused, html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light:focus { + border-color: #ecf0f1; + box-shadow: 0 0 0 2px rgba(236, 240, 241, 0.5); } + html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered, html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover { + background-color: #3a4344; } + html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused, html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus { + border-color: #282f2f; + box-shadow: 0 0 0 2px rgba(40, 47, 47, 0.5); } + html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover { + background-color: #436d9a; } + html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink, html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus { + border-color: #375a7f; + box-shadow: 0 0 0 2px rgba(55, 90, 127, 0.5); } + html.theme--documenter-dark .button.is-link.is-hovered, html.theme--documenter-dark .button.is-link:hover { + background-color: #1fdeb8; } + html.theme--documenter-dark .button.is-link.is-active, html.theme--documenter-dark .button.is-link.is-focused, html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link:focus { + border-color: #1abc9c; + box-shadow: 0 0 0 2px rgba(26, 188, 156, 0.5); } + html.theme--documenter-dark .button.is-info.is-hovered, html.theme--documenter-dark .button.is-info:hover { + background-color: #0363a3; } + html.theme--documenter-dark .button.is-info.is-active, html.theme--documenter-dark .button.is-info.is-focused, html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info:focus { + border-color: #024c7d; + box-shadow: 0 0 0 2px rgba(2, 76, 125, 0.5); } + html.theme--documenter-dark .button.is-success.is-hovered, html.theme--documenter-dark .button.is-success:hover { + background-color: #00aa48; } + html.theme--documenter-dark .button.is-success.is-active, html.theme--documenter-dark .button.is-success.is-focused, html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success:focus { + border-color: #008438; + box-shadow: 0 0 0 2px rgba(0, 132, 56, 0.5); } + html.theme--documenter-dark .button.is-warning.is-hovered, html.theme--documenter-dark .button.is-warning:hover { + background-color: #d39e00; } + html.theme--documenter-dark .button.is-warning.is-active, html.theme--documenter-dark .button.is-warning.is-focused, html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning:focus { + border-color: #ad8100; + box-shadow: 0 0 0 2px rgba(173, 129, 0, 0.5); } + html.theme--documenter-dark .button.is-danger.is-hovered, html.theme--documenter-dark .button.is-danger:hover { + background-color: #c12110; } + html.theme--documenter-dark .button.is-danger.is-active, html.theme--documenter-dark .button.is-danger.is-focused, html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger:focus { + border-color: #9e1b0d; + box-shadow: 0 0 0 2px rgba(158, 27, 13, 0.5); } + html.theme--documenter-dark .label { + color: #dbdee0; } + html.theme--documenter-dark .button, + html.theme--documenter-dark .control.has-icons-left .icon, + html.theme--documenter-dark .control.has-icons-right .icon, + html.theme--documenter-dark .input, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-previous, + html.theme--documenter-dark .select, + html.theme--documenter-dark .select select, + html.theme--documenter-dark .textarea { + height: 2.5em; } + + html.theme--documenter-dark .input, + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark .textarea { + transition: all 200ms ease; + box-shadow: none; + border-width: 1px; + padding-left: 1em; + padding-right: 1em; } + html.theme--documenter-dark .select:after, + html.theme--documenter-dark .select select { + border-width: 1px; } + html.theme--documenter-dark .control.has-addons .button, + html.theme--documenter-dark .control.has-addons .input, + html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search > input, + html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search > input, + html.theme--documenter-dark .control.has-addons .select { + margin-right: -1px; } + html.theme--documenter-dark .notification { + background-color: #343c3d; } + html.theme--documenter-dark .card { + box-shadow: none; + border: 1px solid #343c3d; + background-color: #282f2f; + border-radius: 0.4em; } + html.theme--documenter-dark .card .card-image img { + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .card .card-header { + box-shadow: none; + background-color: rgba(18, 18, 18, 0.2); + border-radius: 0.4em 0.4em 0 0; } + html.theme--documenter-dark .card .card-footer { + background-color: rgba(18, 18, 18, 0.2); } + html.theme--documenter-dark .card .card-footer, + html.theme--documenter-dark .card .card-footer-item { + border-width: 1px; + border-color: #343c3d; } + html.theme--documenter-dark .notification.is-white a:not(.button) { + color: #0a0a0a; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-black a:not(.button) { + color: white; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-light a:not(.button) { + color: #282f2f; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-dark a:not(.button), html.theme--documenter-dark .content kbd.notification a:not(.button) { + color: #ecf0f1; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-primary a:not(.button), html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-link a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-info a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-success a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-warning a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .notification.is-danger a:not(.button) { + color: #fff; + text-decoration: underline; } + html.theme--documenter-dark .tag, html.theme--documenter-dark .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .content kbd { + border-radius: 0.4em; } + html.theme--documenter-dark .menu-list a { + transition: all 300ms ease; } + html.theme--documenter-dark .modal-card-body { + background-color: #282f2f; } + html.theme--documenter-dark .modal-card-foot, + html.theme--documenter-dark .modal-card-head { + border-color: #343c3d; } + html.theme--documenter-dark .message-header { + font-weight: 700; + background-color: #343c3d; + color: white; } + html.theme--documenter-dark .message-body { + border-width: 1px; + border-color: #343c3d; } + html.theme--documenter-dark .navbar { + border-radius: 0.4em; } + html.theme--documenter-dark .navbar.is-transparent { + background: none; } + html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .navbar .navbar-menu { + background-color: #375a7f; + border-radius: 0 0 0.4em 0.4em; } } + html.theme--documenter-dark .hero .navbar, + html.theme--documenter-dark body > .navbar { + border-radius: 0; } + html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark .pagination-previous { + border-width: 1px; } + html.theme--documenter-dark .panel-block, + html.theme--documenter-dark .panel-heading, + html.theme--documenter-dark .panel-tabs { + border-width: 1px; } + html.theme--documenter-dark .panel-block:first-child, + html.theme--documenter-dark .panel-heading:first-child, + html.theme--documenter-dark .panel-tabs:first-child { + border-top-width: 1px; } + html.theme--documenter-dark .panel-heading { + font-weight: 700; } + html.theme--documenter-dark .panel-tabs a { + border-width: 1px; + margin-bottom: -1px; } + html.theme--documenter-dark .panel-tabs a.is-active { + border-bottom-color: #17a689; } + html.theme--documenter-dark .panel-block:hover { + color: #1dd2af; } + html.theme--documenter-dark .panel-block:hover .panel-icon { + color: #1dd2af; } + html.theme--documenter-dark .panel-block.is-active .panel-icon { + color: #17a689; } + html.theme--documenter-dark .tabs a { + border-bottom-width: 1px; + margin-bottom: -1px; } + html.theme--documenter-dark .tabs ul { + border-bottom-width: 1px; } + html.theme--documenter-dark .tabs.is-boxed a { + border-width: 1px; } + html.theme--documenter-dark .tabs.is-boxed li.is-active a { + background-color: #1f2424; } + html.theme--documenter-dark .tabs.is-toggle li a { + border-width: 1px; + margin-bottom: 0; } + html.theme--documenter-dark .tabs.is-toggle li + li { + margin-left: -1px; } + html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + html.theme--documenter-dark h1 .docs-heading-anchor, html.theme--documenter-dark h1 .docs-heading-anchor:hover, html.theme--documenter-dark h1 .docs-heading-anchor:visited, html.theme--documenter-dark h2 .docs-heading-anchor, html.theme--documenter-dark h2 .docs-heading-anchor:hover, html.theme--documenter-dark h2 .docs-heading-anchor:visited, html.theme--documenter-dark h3 .docs-heading-anchor, html.theme--documenter-dark h3 .docs-heading-anchor:hover, html.theme--documenter-dark h3 .docs-heading-anchor:visited, html.theme--documenter-dark h4 .docs-heading-anchor, html.theme--documenter-dark h4 .docs-heading-anchor:hover, html.theme--documenter-dark h4 .docs-heading-anchor:visited, html.theme--documenter-dark h5 .docs-heading-anchor, html.theme--documenter-dark h5 .docs-heading-anchor:hover, html.theme--documenter-dark h5 .docs-heading-anchor:visited, html.theme--documenter-dark h6 .docs-heading-anchor, html.theme--documenter-dark h6 .docs-heading-anchor:hover, html.theme--documenter-dark h6 .docs-heading-anchor:visited { + color: #f2f2f2; } + html.theme--documenter-dark h1 .docs-heading-anchor-permalink, html.theme--documenter-dark h2 .docs-heading-anchor-permalink, html.theme--documenter-dark h3 .docs-heading-anchor-permalink, html.theme--documenter-dark h4 .docs-heading-anchor-permalink, html.theme--documenter-dark h5 .docs-heading-anchor-permalink, html.theme--documenter-dark h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + html.theme--documenter-dark .docs-light-only { + display: none !important; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 15px; } + html.theme--documenter-dark .admonition strong { + color: currentColor; } + html.theme--documenter-dark .admonition.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.85em; } + html.theme--documenter-dark .admonition.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .admonition.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .admonition.is-default { + background-color: #282f2f; + border-color: #5e6d6f; } + html.theme--documenter-dark .admonition.is-default > .admonition-header { + background-color: #5e6d6f; } + html.theme--documenter-dark .admonition.is-info { + background-color: #282f2f; + border-color: #024c7d; } + html.theme--documenter-dark .admonition.is-info > .admonition-header { + background-color: #024c7d; } + html.theme--documenter-dark .admonition.is-success { + background-color: #282f2f; + border-color: #008438; } + html.theme--documenter-dark .admonition.is-success > .admonition-header { + background-color: #008438; } + html.theme--documenter-dark .admonition.is-warning { + background-color: #282f2f; + border-color: #ad8100; } + html.theme--documenter-dark .admonition.is-warning > .admonition-header { + background-color: #ad8100; } + html.theme--documenter-dark .admonition.is-danger { + background-color: #282f2f; + border-color: #9e1b0d; } + html.theme--documenter-dark .admonition.is-danger > .admonition-header { + background-color: #9e1b0d; } + html.theme--documenter-dark .admonition.is-compat { + background-color: #282f2f; + border-color: #137886; } + html.theme--documenter-dark .admonition.is-compat > .admonition-header { + background-color: #137886; } + html.theme--documenter-dark .admonition-header { + background-color: #5e6d6f; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 1em 1.25em; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #5e6d6f; + box-shadow: none; + max-width: 100%; } + html.theme--documenter-dark .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: #282f2f; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > header code { + background-color: transparent; } + html.theme--documenter-dark .docstring > header .docstring-binding { + margin-right: 0.3em; } + html.theme--documenter-dark .docstring > header .docstring-category { + margin-left: 0.3em; } + html.theme--documenter-dark .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; + padding: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #171717; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + html.theme--documenter-dark #documenter .docs-main section.footnotes { + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child, html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + html.theme--documenter-dark #documenter .docs-main .docs-footer { + display: flex; + flex-wrap: wrap; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #5e6d6f; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage, html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break { + flex-basis: 100%; + height: 0; } + html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message { + font-size: 0.8em; + margin: 0.5em auto 0 auto; + text-align: center; } + html.theme--documenter-dark #documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #fff; + background-color: #282f2f; + border-right: 1px solid #5e6d6f; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 15px; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + html.theme--documenter-dark #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #171717; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar { + left: 0; + top: 0; } } + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 14.25px; + margin-left: 1em; + border-left: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 11.25px; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #fff; + background: #282f2f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #fff; + background-color: #32393a; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #5e6d6f; + border-bottom: 1px solid #5e6d6f; + background-color: #1f2424; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: #1f2424; + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #32393a; + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #5e6d6f; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 12.75px; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #3b4445; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #4e5a5c; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #3b4445; } + html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #4e5a5c; } } + html.theme--documenter-dark #documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + html.theme--documenter-dark { + background-color: #1f2424; + font-size: 16px; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-builtin-name, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs { + display: block; + overflow-x: auto; + background: #2b2b2b; + color: #f8f8f2; + padding: 0.5em; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-builtin-name, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/previews/PR441/assets/themes/documenter-light.css b/previews/PR441/assets/themes/documenter-light.css new file mode 100644 index 00000000..57fdf947 --- /dev/null +++ b/previews/PR441/assets/themes/documenter-light.css @@ -0,0 +1,7630 @@ +@charset "UTF-8"; +/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child), .admonition:not(:last-child) { + margin-bottom: 1.5rem; } + +.delete, .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + .delete::before, .modal-close::before, .delete::after, .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .delete::before, .modal-close::before { + height: 2px; + width: 50%; } + .delete::after, .modal-close::after { + height: 50%; + width: 2px; } + .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + .delete:active, .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete, .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.delete, .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.delete, .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .modal, .modal-background, .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.button, .input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select, .file-cta, +.file-name, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + .button:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .file-cta:focus, + .file-name:focus, .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, + .is-focused.file-name, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .button:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .file-cta:active, + .file-name:active, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .is-active.button, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active, .is-active.file-cta, + .is-active.file-name, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis { + outline: none; } + .button[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], + .file-name[disabled], .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], + fieldset[disabled] .button, + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select, + fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, + fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis { + cursor: not-allowed; } + +/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +embed, +iframe, +object, +video { + height: auto; + max-width: 100%; } + +audio { + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + td:not([align]), + th:not([align]) { + text-align: left; } + +html { + background-color: white; + font-size: 16px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: auto; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + +article, +aside, +figure, +footer, +header, +hgroup, +section { + display: block; } + +body, +button, +input, +select, +textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #222222; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + +a { + color: #2e63b8; + cursor: pointer; + text-decoration: none; } + a strong { + color: currentColor; } + a:hover { + color: #363636; } + +code { + background-color: rgba(0, 0, 0, 0.05); + color: #000000; + font-size: 0.875em; + font-weight: normal; + padding: 0.1em; } + +hr { + background-color: whitesmoke; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + +img { + height: auto; + max-width: 100%; } + +input[type="checkbox"], +input[type="radio"] { + vertical-align: baseline; } + +small { + font-size: 0.875em; } + +span { + font-style: inherit; + font-weight: inherit; } + +strong { + color: #222222; + font-weight: 700; } + +fieldset { + border: none; } + +pre { + -webkit-overflow-scrolling: touch; + background-color: whitesmoke; + color: #222222; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + +table td, +table th { + vertical-align: top; } + table td:not([align]), + table th:not([align]) { + text-align: left; } + +table th { + color: #222222; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 1rem !important; } + +.is-size-7, .docstring > section > a.docs-sourcelink { + font-size: 0.75rem !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 1rem !important; } + .is-size-7-mobile { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 1rem !important; } + .is-size-7-tablet { + font-size: 0.75rem !important; } } + +@media screen and (max-width: 1055px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 1rem !important; } + .is-size-7-touch { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1056px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 1rem !important; } + .is-size-7-desktop { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1216px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 1rem !important; } + .is-size-7-widescreen { + font-size: 0.75rem !important; } } + +@media screen and (min-width: 1408px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 1rem !important; } + .is-size-7-fullhd { + font-size: 0.75rem !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1055px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1056px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1216px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1408px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1055px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1408px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1055px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1056px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1216px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1408px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1055px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1056px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1216px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1408px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: whitesmoke !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #dbdbdb !important; } + +.has-background-light { + background-color: whitesmoke !important; } + +.has-text-dark { + color: #363636 !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #1c1c1c !important; } + +.has-background-dark { + background-color: #363636 !important; } + +.has-text-primary { + color: #4eb5de !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #27a1d2 !important; } + +.has-background-primary { + background-color: #4eb5de !important; } + +.has-text-link { + color: #2e63b8 !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #244d8f !important; } + +.has-background-link { + background-color: #2e63b8 !important; } + +.has-text-info { + color: #209cee !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #0f81cc !important; } + +.has-background-info { + background-color: #209cee !important; } + +.has-text-success { + color: #22c35b !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #1a9847 !important; } + +.has-background-success { + background-color: #22c35b !important; } + +.has-text-warning { + color: #ffdd57 !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #ffd324 !important; } + +.has-background-warning { + background-color: #ffdd57 !important; } + +.has-text-danger { + color: #da0b00 !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #a70800 !important; } + +.has-background-danger { + background-color: #da0b00 !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #363636 !important; } + +.has-background-grey-darker { + background-color: #363636 !important; } + +.has-text-grey-dark { + color: #4a4a4a !important; } + +.has-background-grey-dark { + background-color: #4a4a4a !important; } + +.has-text-grey { + color: #7a7a7a !important; } + +.has-background-grey { + background-color: #7a7a7a !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: whitesmoke !important; } + +.has-background-white-ter { + background-color: whitesmoke !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-medium { + font-weight: 500 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-family-primary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "Roboto Mono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.is-relative { + position: relative !important; } + +.box { + background-color: white; + border-radius: 6px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + display: block; + padding: 1.25rem; } + +a.box:hover, a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #2e63b8; } + +a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #2e63b8; } + +.button { + background-color: white; + border-color: #dbdbdb; + border-width: 1px; + color: #363636; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + .button strong { + color: inherit; } + .button .icon, .button .icon.is-small, .button #documenter .docs-sidebar form.docs-search > input.icon, #documenter .docs-sidebar .button form.docs-search > input.icon, .button .icon.is-medium, .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + .button:hover, .button.is-hovered { + border-color: #b5b5b5; + color: #363636; } + .button:focus, .button.is-focused { + border-color: #2e63b8; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #222222; + text-decoration: underline; } + .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { + background-color: whitesmoke; + color: #222222; } + .button.is-text:active, .button.is-text.is-active { + background-color: #e8e8e8; + color: #222222; } + .button.is-text[disabled], + fieldset[disabled] .button.is-text { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:hover, .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus, .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .button.is-white:active, .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .button.is-white[disabled], + fieldset[disabled] .button.is-white { + background-color: white; + border-color: transparent; + box-shadow: none; } + .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { + background-color: black; } + .button.is-white.is-inverted[disabled], + fieldset[disabled] .button.is-white.is-inverted { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { + background-color: white; + border-color: white; + color: #0a0a0a; } + .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .button.is-black:hover, .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + .button.is-black:focus, .button.is-black.is-focused { + border-color: transparent; + color: white; } + .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .button.is-black:active, .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + .button.is-black[disabled], + fieldset[disabled] .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-black.is-inverted[disabled], + fieldset[disabled] .button.is-black.is-inverted { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-light { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .button.is-light:hover, .button.is-light.is-hovered { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .button.is-light:focus, .button.is-light.is-focused { + border-color: transparent; + color: #363636; } + .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .button.is-light:active, .button.is-light.is-active { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .button.is-light[disabled], + fieldset[disabled] .button.is-light { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; } + .button.is-light.is-inverted { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { + background-color: #292929; } + .button.is-light.is-inverted[disabled], + fieldset[disabled] .button.is-light.is-inverted { + background-color: #363636; + border-color: transparent; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-light.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { + background-color: #363636; + color: whitesmoke; } + .button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-light.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark, .content kbd.button { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:hover, .content kbd.button:hover, .button.is-dark.is-hovered, .content kbd.button.is-hovered { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus, .content kbd.button:focus, .button.is-dark.is-focused, .content kbd.button.is-focused { + border-color: transparent; + color: whitesmoke; } + .button.is-dark:focus:not(:active), .content kbd.button:focus:not(:active), .button.is-dark.is-focused:not(:active), .content kbd.button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .button.is-dark:active, .content kbd.button:active, .button.is-dark.is-active, .content kbd.button.is-active { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .button.is-dark[disabled], .content kbd.button[disabled], + fieldset[disabled] .button.is-dark, + fieldset[disabled] .content kbd.button, + .content fieldset[disabled] kbd.button { + background-color: #363636; + border-color: transparent; + box-shadow: none; } + .button.is-dark.is-inverted, .content kbd.button.is-inverted { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted:hover, .content kbd.button.is-inverted:hover, .button.is-dark.is-inverted.is-hovered, .content kbd.button.is-inverted.is-hovered { + background-color: #e8e8e8; } + .button.is-dark.is-inverted[disabled], .content kbd.button.is-inverted[disabled], + fieldset[disabled] .button.is-dark.is-inverted, + fieldset[disabled] .content kbd.button.is-inverted, + .content fieldset[disabled] kbd.button.is-inverted { + background-color: whitesmoke; + border-color: transparent; + box-shadow: none; + color: #363636; } + .button.is-dark.is-loading::after, .content kbd.button.is-loading::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined, .content kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + color: #363636; } + .button.is-dark.is-outlined:hover, .content kbd.button.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .content kbd.button.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .content kbd.button.is-outlined:focus, .button.is-dark.is-outlined.is-focused, .content kbd.button.is-outlined.is-focused { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .button.is-dark.is-outlined.is-loading::after, .content kbd.button.is-outlined.is-loading::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-outlined.is-loading:hover::after, .content kbd.button.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .content kbd.button.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after, .content kbd.button.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent whitesmoke whitesmoke !important; } + .button.is-dark.is-outlined[disabled], .content kbd.button.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-outlined, + fieldset[disabled] .content kbd.button.is-outlined, + .content fieldset[disabled] kbd.button.is-outlined { + background-color: transparent; + border-color: #363636; + box-shadow: none; + color: #363636; } + .button.is-dark.is-inverted.is-outlined, .content kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + color: whitesmoke; } + .button.is-dark.is-inverted.is-outlined:hover, .content kbd.button.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .content kbd.button.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .content kbd.button.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused, .content kbd.button.is-inverted.is-outlined.is-focused { + background-color: whitesmoke; + color: #363636; } + .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #363636 #363636 !important; } + .button.is-dark.is-inverted.is-outlined[disabled], .content kbd.button.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-dark.is-inverted.is-outlined, + fieldset[disabled] .content kbd.button.is-inverted.is-outlined, + .content fieldset[disabled] kbd.button.is-inverted.is-outlined { + background-color: transparent; + border-color: whitesmoke; + box-shadow: none; + color: whitesmoke; } + .button.is-primary, .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .button.is-primary:hover, .docstring > section > a.button.docs-sourcelink:hover, .button.is-primary.is-hovered, .docstring > section > a.button.is-hovered.docs-sourcelink { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .button.is-primary:focus, .docstring > section > a.button.docs-sourcelink:focus, .button.is-primary.is-focused, .docstring > section > a.button.is-focused.docs-sourcelink { + border-color: transparent; + color: #fff; } + .button.is-primary:focus:not(:active), .docstring > section > a.button.docs-sourcelink:focus:not(:active), .button.is-primary.is-focused:not(:active), .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .button.is-primary:active, .docstring > section > a.button.docs-sourcelink:active, .button.is-primary.is-active, .docstring > section > a.button.is-active.docs-sourcelink { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .button.is-primary[disabled], .docstring > section > a.button.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary, + fieldset[disabled] .docstring > section > a.button.docs-sourcelink { + background-color: #4eb5de; + border-color: transparent; + box-shadow: none; } + .button.is-primary.is-inverted, .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted:hover, .docstring > section > a.button.is-inverted.docs-sourcelink:hover, .button.is-primary.is-inverted.is-hovered, .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink { + background-color: #f2f2f2; } + .button.is-primary.is-inverted[disabled], .docstring > section > a.button.is-inverted.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted, + fieldset[disabled] .docstring > section > a.button.is-inverted.docs-sourcelink { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-loading::after, .docstring > section > a.button.is-loading.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined, .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + color: #4eb5de; } + .button.is-primary.is-outlined:hover, .docstring > section > a.button.is-outlined.docs-sourcelink:hover, .button.is-primary.is-outlined.is-hovered, .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-outlined:focus, .docstring > section > a.button.is-outlined.docs-sourcelink:focus, .button.is-primary.is-outlined.is-focused, .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .button.is-primary.is-outlined.is-loading::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined[disabled], .docstring > section > a.button.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #4eb5de; + box-shadow: none; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-primary.is-inverted.is-outlined:hover, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, .button.is-primary.is-inverted.is-outlined:focus, .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, .button.is-primary.is-inverted.is-outlined.is-focused, .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink { + background-color: #fff; + color: #4eb5de; } + .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after { + border-color: transparent transparent #4eb5de #4eb5de !important; } + .button.is-primary.is-inverted.is-outlined[disabled], .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled], + fieldset[disabled] .button.is-primary.is-inverted.is-outlined, + fieldset[disabled] .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-link { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .button.is-link:hover, .button.is-link.is-hovered { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .button.is-link:focus, .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button.is-link:active, .button.is-link.is-active { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .button.is-link[disabled], + fieldset[disabled] .button.is-link { + background-color: #2e63b8; + border-color: transparent; + box-shadow: none; } + .button.is-link.is-inverted { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-link.is-inverted[disabled], + fieldset[disabled] .button.is-link.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + color: #2e63b8; } + .button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-outlined { + background-color: transparent; + border-color: #2e63b8; + box-shadow: none; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #2e63b8; } + .button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #2e63b8 #2e63b8 !important; } + .button.is-link.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-info { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .button.is-info:hover, .button.is-info.is-hovered { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], + fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: transparent; + box-shadow: none; } + .button.is-info.is-inverted { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-info.is-inverted[disabled], + fieldset[disabled] .button.is-info.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #209cee; } + .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + color: #209cee; } + .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + box-shadow: none; + color: #209cee; } + .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-success { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .button.is-success:hover, .button.is-success.is-hovered { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .button.is-success:focus, .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .button.is-success:active, .button.is-success.is-active { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .button.is-success[disabled], + fieldset[disabled] .button.is-success { + background-color: #22c35b; + border-color: transparent; + box-shadow: none; } + .button.is-success.is-inverted { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-success.is-inverted[disabled], + fieldset[disabled] .button.is-success.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + color: #22c35b; } + .button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-outlined { + background-color: transparent; + border-color: #22c35b; + box-shadow: none; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #22c35b; } + .button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #22c35b #22c35b !important; } + .button.is-success.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:hover, .button.is-warning.is-hovered { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], + fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: transparent; + box-shadow: none; } + .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { + background-color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted[disabled], + fieldset[disabled] .button.is-warning.is-inverted { + background-color: rgba(0, 0, 0, 0.7); + border-color: transparent; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-loading::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + color: #ffdd57; } + .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } + .button.is-warning.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-outlined { + background-color: transparent; + border-color: #ffdd57; + box-shadow: none; + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + color: rgba(0, 0, 0, 0.7); } + .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { + background-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #ffdd57 #ffdd57 !important; } + .button.is-warning.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.7); + box-shadow: none; + color: rgba(0, 0, 0, 0.7); } + .button.is-danger { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .button.is-danger:hover, .button.is-danger.is-hovered { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .button.is-danger:focus, .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .button.is-danger:active, .button.is-danger.is-active { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .button.is-danger[disabled], + fieldset[disabled] .button.is-danger { + background-color: #da0b00; + border-color: transparent; + box-shadow: none; } + .button.is-danger.is-inverted { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { + background-color: #f2f2f2; } + .button.is-danger.is-inverted[disabled], + fieldset[disabled] .button.is-danger.is-inverted { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + color: #da0b00; } + .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-outlined { + background-color: transparent; + border-color: #da0b00; + box-shadow: none; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { + background-color: #fff; + color: #da0b00; } + .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { + border-color: transparent transparent #da0b00 #da0b00 !important; } + .button.is-danger.is-inverted.is-outlined[disabled], + fieldset[disabled] .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-small, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 2px; + font-size: 0.75rem; } + .button.is-normal { + font-size: 1rem; } + .button.is-medium { + font-size: 1.25rem; } + .button.is-large { + font-size: 1.5rem; } + .button[disabled], + fieldset[disabled] .button { + background-color: white; + border-color: #dbdbdb; + box-shadow: none; + opacity: 0.5; } + .button.is-fullwidth { + display: flex; + width: 100%; } + .button.is-loading { + color: transparent !important; + pointer-events: none; } + .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + .button.is-static { + background-color: whitesmoke; + border-color: #dbdbdb; + color: #7a7a7a; + box-shadow: none; + pointer-events: none; } + .button.is-rounded, #documenter .docs-sidebar form.docs-search > input.button { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .buttons .button { + margin-bottom: 0.5rem; } + .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + .buttons:last-child { + margin-bottom: -0.5rem; } + .buttons:not(:last-child) { + margin-bottom: 1rem; } + .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { + border-radius: 2px; + font-size: 0.75rem; } + .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { + font-size: 1.25rem; } + .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { + font-size: 1.5rem; } + .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + .buttons.has-addons .button:last-child { + margin-right: 0; } + .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { + z-index: 2; } + .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { + z-index: 3; } + .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + .buttons.has-addons .button.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .buttons.is-centered { + justify-content: center; } + .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + .buttons.is-right { + justify-content: flex-end; } + .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { + margin-left: 0.25rem; + margin-right: 0.25rem; } + +.container { + flex-grow: 1; + margin: 0 auto; + position: relative; + width: auto; } + @media screen and (min-width: 1056px) { + .container { + max-width: 992px; } + .container.is-fluid { + margin-left: 32px; + margin-right: 32px; + max-width: none; } } + @media screen and (max-width: 1215px) { + .container.is-widescreen { + max-width: 1152px; } } + @media screen and (max-width: 1407px) { + .container.is-fullhd { + max-width: 1344px; } } + @media screen and (min-width: 1216px) { + .container { + max-width: 1152px; } } + @media screen and (min-width: 1408px) { + .container { + max-width: 1344px; } } + +.content li + li { + margin-top: 0.25em; } + +.content p:not(:last-child), +.content dl:not(:last-child), +.content ol:not(:last-child), +.content ul:not(:last-child), +.content blockquote:not(:last-child), +.content pre:not(:last-child), +.content table:not(:last-child) { + margin-bottom: 1em; } + +.content h1, +.content h2, +.content h3, +.content h4, +.content h5, +.content h6 { + color: #222222; + font-weight: 600; + line-height: 1.125; } + +.content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + .content h1:not(:first-child) { + margin-top: 1em; } + +.content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + .content h2:not(:first-child) { + margin-top: 1.1428em; } + +.content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + .content h3:not(:first-child) { + margin-top: 1.3333em; } + +.content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + +.content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + +.content h6 { + font-size: 1em; + margin-bottom: 1em; } + +.content blockquote { + background-color: whitesmoke; + border-left: 5px solid #dbdbdb; + padding: 1.25em 1.5em; } + +.content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + .content ol:not([type]) { + list-style-type: decimal; } + .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0.7rem 0.5rem; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #222222; } + .content table th:not([align]) { + text-align: left; } + .content table thead td, + .content table thead th { + border-width: 0 0 2px; + color: #222222; } + .content table tfoot td, + .content table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .content table tbody tr:last-child td, + .content table tbody tr:last-child th { + border-bottom-width: 0; } + +.content .tabs li + li { + margin-top: 0; } + +.content.is-small, #documenter .docs-sidebar form.docs-search > input.content { + font-size: 0.75rem; } + +.content.is-medium { + font-size: 1.25rem; } + +.content.is-large { + font-size: 1.5rem; } + +.icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + .icon.is-small, #documenter .docs-sidebar form.docs-search > input.icon { + height: 1rem; + width: 1rem; } + .icon.is-medium { + height: 2rem; + width: 2rem; } + .icon.is-large { + height: 3rem; + width: 3rem; } + +.image, #documenter .docs-sidebar .docs-logo > img { + display: block; + position: relative; } + .image img, #documenter .docs-sidebar .docs-logo > img img { + display: block; + height: auto; + width: 100%; } + .image img.is-rounded, #documenter .docs-sidebar .docs-logo > img img.is-rounded { + border-radius: 290486px; } + .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, + .image.is-square .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, + .image.is-1by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, + .image.is-5by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, + .image.is-4by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, + .image.is-3by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, + .image.is-5by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, + .image.is-16by9 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, + .image.is-2by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, + .image.is-3by1 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, + .image.is-4by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, + .image.is-3by4 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, + .image.is-2by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, + .image.is-3by5 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, + .image.is-9by16 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, + .image.is-1by2 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, + .image.is-1by3 .has-ratio, + #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio { + height: 100%; + width: 100%; } + .image.is-square, #documenter .docs-sidebar .docs-logo > img.is-square, .image.is-1by1, #documenter .docs-sidebar .docs-logo > img.is-1by1 { + padding-top: 100%; } + .image.is-5by4, #documenter .docs-sidebar .docs-logo > img.is-5by4 { + padding-top: 80%; } + .image.is-4by3, #documenter .docs-sidebar .docs-logo > img.is-4by3 { + padding-top: 75%; } + .image.is-3by2, #documenter .docs-sidebar .docs-logo > img.is-3by2 { + padding-top: 66.6666%; } + .image.is-5by3, #documenter .docs-sidebar .docs-logo > img.is-5by3 { + padding-top: 60%; } + .image.is-16by9, #documenter .docs-sidebar .docs-logo > img.is-16by9 { + padding-top: 56.25%; } + .image.is-2by1, #documenter .docs-sidebar .docs-logo > img.is-2by1 { + padding-top: 50%; } + .image.is-3by1, #documenter .docs-sidebar .docs-logo > img.is-3by1 { + padding-top: 33.3333%; } + .image.is-4by5, #documenter .docs-sidebar .docs-logo > img.is-4by5 { + padding-top: 125%; } + .image.is-3by4, #documenter .docs-sidebar .docs-logo > img.is-3by4 { + padding-top: 133.3333%; } + .image.is-2by3, #documenter .docs-sidebar .docs-logo > img.is-2by3 { + padding-top: 150%; } + .image.is-3by5, #documenter .docs-sidebar .docs-logo > img.is-3by5 { + padding-top: 166.6666%; } + .image.is-9by16, #documenter .docs-sidebar .docs-logo > img.is-9by16 { + padding-top: 177.7777%; } + .image.is-1by2, #documenter .docs-sidebar .docs-logo > img.is-1by2 { + padding-top: 200%; } + .image.is-1by3, #documenter .docs-sidebar .docs-logo > img.is-1by3 { + padding-top: 300%; } + .image.is-16x16, #documenter .docs-sidebar .docs-logo > img.is-16x16 { + height: 16px; + width: 16px; } + .image.is-24x24, #documenter .docs-sidebar .docs-logo > img.is-24x24 { + height: 24px; + width: 24px; } + .image.is-32x32, #documenter .docs-sidebar .docs-logo > img.is-32x32 { + height: 32px; + width: 32px; } + .image.is-48x48, #documenter .docs-sidebar .docs-logo > img.is-48x48 { + height: 48px; + width: 48px; } + .image.is-64x64, #documenter .docs-sidebar .docs-logo > img.is-64x64 { + height: 64px; + width: 64px; } + .image.is-96x96, #documenter .docs-sidebar .docs-logo > img.is-96x96 { + height: 96px; + width: 96px; } + .image.is-128x128, #documenter .docs-sidebar .docs-logo > img.is-128x128 { + height: 128px; + width: 128px; } + +.notification { + background-color: whitesmoke; + border-radius: 4px; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .notification strong { + color: currentColor; } + .notification code, + .notification pre { + background: white; } + .notification pre code { + background: transparent; } + .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + .notification .title, + .notification .subtitle, + .notification .content { + color: currentColor; } + .notification.is-white { + background-color: white; + color: #0a0a0a; } + .notification.is-black { + background-color: #0a0a0a; + color: white; } + .notification.is-light { + background-color: whitesmoke; + color: #363636; } + .notification.is-dark, .content kbd.notification { + background-color: #363636; + color: whitesmoke; } + .notification.is-primary, .docstring > section > a.notification.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .notification.is-link { + background-color: #2e63b8; + color: #fff; } + .notification.is-info { + background-color: #209cee; + color: #fff; } + .notification.is-success { + background-color: #22c35b; + color: #fff; } + .notification.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .notification.is-danger { + background-color: #da0b00; + color: #fff; } + +.progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 1rem; + overflow: hidden; + padding: 0; + width: 100%; } + .progress::-webkit-progress-bar { + background-color: #dbdbdb; } + .progress::-webkit-progress-value { + background-color: #222222; } + .progress::-moz-progress-bar { + background-color: #222222; } + .progress::-ms-fill { + background-color: #222222; + border: none; } + .progress.is-white::-webkit-progress-value { + background-color: white; } + .progress.is-white::-moz-progress-bar { + background-color: white; } + .progress.is-white::-ms-fill { + background-color: white; } + .progress.is-white:indeterminate { + background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); } + .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + .progress.is-black:indeterminate { + background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); } + .progress.is-light::-webkit-progress-value { + background-color: whitesmoke; } + .progress.is-light::-moz-progress-bar { + background-color: whitesmoke; } + .progress.is-light::-ms-fill { + background-color: whitesmoke; } + .progress.is-light:indeterminate { + background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); } + .progress.is-dark::-webkit-progress-value, .content kbd.progress::-webkit-progress-value { + background-color: #363636; } + .progress.is-dark::-moz-progress-bar, .content kbd.progress::-moz-progress-bar { + background-color: #363636; } + .progress.is-dark::-ms-fill, .content kbd.progress::-ms-fill { + background-color: #363636; } + .progress.is-dark:indeterminate, .content kbd.progress:indeterminate { + background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); } + .progress.is-primary::-webkit-progress-value, .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value { + background-color: #4eb5de; } + .progress.is-primary::-moz-progress-bar, .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar { + background-color: #4eb5de; } + .progress.is-primary::-ms-fill, .docstring > section > a.progress.docs-sourcelink::-ms-fill { + background-color: #4eb5de; } + .progress.is-primary:indeterminate, .docstring > section > a.progress.docs-sourcelink:indeterminate { + background-image: linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%); } + .progress.is-link::-webkit-progress-value { + background-color: #2e63b8; } + .progress.is-link::-moz-progress-bar { + background-color: #2e63b8; } + .progress.is-link::-ms-fill { + background-color: #2e63b8; } + .progress.is-link:indeterminate { + background-image: linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%); } + .progress.is-info::-webkit-progress-value { + background-color: #209cee; } + .progress.is-info::-moz-progress-bar { + background-color: #209cee; } + .progress.is-info::-ms-fill { + background-color: #209cee; } + .progress.is-info:indeterminate { + background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); } + .progress.is-success::-webkit-progress-value { + background-color: #22c35b; } + .progress.is-success::-moz-progress-bar { + background-color: #22c35b; } + .progress.is-success::-ms-fill { + background-color: #22c35b; } + .progress.is-success:indeterminate { + background-image: linear-gradient(to right, #22c35b 30%, #dbdbdb 30%); } + .progress.is-warning::-webkit-progress-value { + background-color: #ffdd57; } + .progress.is-warning::-moz-progress-bar { + background-color: #ffdd57; } + .progress.is-warning::-ms-fill { + background-color: #ffdd57; } + .progress.is-warning:indeterminate { + background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); } + .progress.is-danger::-webkit-progress-value { + background-color: #da0b00; } + .progress.is-danger::-moz-progress-bar { + background-color: #da0b00; } + .progress.is-danger::-ms-fill { + background-color: #da0b00; } + .progress.is-danger:indeterminate { + background-image: linear-gradient(to right, #da0b00 30%, #dbdbdb 30%); } + .progress:indeterminate { + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-name: moveIndeterminate; + animation-timing-function: linear; + background-color: #dbdbdb; + background-image: linear-gradient(to right, #222222 30%, #dbdbdb 30%); + background-position: top left; + background-repeat: no-repeat; + background-size: 150% 150%; } + .progress:indeterminate::-webkit-progress-bar { + background-color: transparent; } + .progress:indeterminate::-moz-progress-bar { + background-color: transparent; } + .progress.is-small, #documenter .docs-sidebar form.docs-search > input.progress { + height: 0.75rem; } + .progress.is-medium { + height: 1.25rem; } + .progress.is-large { + height: 1.5rem; } + +@keyframes moveIndeterminate { + from { + background-position: 200% 0; } + to { + background-position: -200% 0; } } + +.table { + background-color: white; + color: #363636; } + .table td, + .table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .table td.is-white, + .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + .table td.is-black, + .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .table td.is-light, + .table th.is-light { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .table td.is-dark, + .table th.is-dark { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .table td.is-primary, + .table th.is-primary { + background-color: #4eb5de; + border-color: #4eb5de; + color: #fff; } + .table td.is-link, + .table th.is-link { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + .table td.is-info, + .table th.is-info { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .table td.is-success, + .table th.is-success { + background-color: #22c35b; + border-color: #22c35b; + color: #fff; } + .table td.is-warning, + .table th.is-warning { + background-color: #ffdd57; + border-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .table td.is-danger, + .table th.is-danger { + background-color: #da0b00; + border-color: #da0b00; + color: #fff; } + .table td.is-narrow, + .table th.is-narrow { + white-space: nowrap; + width: 1%; } + .table td.is-selected, + .table th.is-selected { + background-color: #4eb5de; + color: #fff; } + .table td.is-selected a, + .table td.is-selected strong, + .table th.is-selected a, + .table th.is-selected strong { + color: currentColor; } + .table th { + color: #222222; } + .table th:not([align]) { + text-align: left; } + .table tr.is-selected { + background-color: #4eb5de; + color: #fff; } + .table tr.is-selected a, + .table tr.is-selected strong { + color: currentColor; } + .table tr.is-selected td, + .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + .table thead { + background-color: transparent; } + .table thead td, + .table thead th { + border-width: 0 0 2px; + color: #222222; } + .table tfoot { + background-color: transparent; } + .table tfoot td, + .table tfoot th { + border-width: 2px 0 0; + color: #222222; } + .table tbody { + background-color: transparent; } + .table tbody tr:last-child td, + .table tbody tr:last-child th { + border-bottom-width: 0; } + .table.is-bordered td, + .table.is-bordered th { + border-width: 1px; } + .table.is-bordered tr:last-child td, + .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + .table.is-fullwidth { + width: 100%; } + .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #fafafa; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: whitesmoke; } + .table.is-narrow td, + .table.is-narrow th { + padding: 0.25em 0.5em; } + .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #fafafa; } + +.table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + +.tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .tags .tag, .tags .docstring > section > a.docs-sourcelink, .tags .content kbd, .content .tags kbd { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child) { + margin-right: 0.5rem; } + .tags:last-child { + margin-bottom: -0.5rem; } + .tags:not(:last-child) { + margin-bottom: 1rem; } + .tags.are-medium .tag:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), .tags.are-medium .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .docstring > section > a.docs-sourcelink, .tags.is-centered .content kbd, .content .tags.is-centered kbd { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .docstring > section > a.docs-sourcelink, .tags.has-addons .content kbd, .content .tags.has-addons kbd { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body) { + align-items: center; + background-color: whitesmoke; + border-radius: 4px; + color: #222222; + display: inline-flex; + font-size: 0.75rem; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + .tag:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete, .content kbd:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag:not(body).is-white, .docstring > section > a.docs-sourcelink:not(body).is-white, .content kbd:not(body).is-white { + background-color: white; + color: #0a0a0a; } + .tag:not(body).is-black, .docstring > section > a.docs-sourcelink:not(body).is-black, .content kbd:not(body).is-black { + background-color: #0a0a0a; + color: white; } + .tag:not(body).is-light, .docstring > section > a.docs-sourcelink:not(body).is-light, .content kbd:not(body).is-light { + background-color: whitesmoke; + color: #363636; } + .tag:not(body).is-dark, .docstring > section > a.docs-sourcelink:not(body).is-dark, .content kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag:not(body).is-primary, .docstring > section > a.docs-sourcelink:not(body), .content kbd:not(body).is-primary { + background-color: #4eb5de; + color: #fff; } + .tag:not(body).is-link, .docstring > section > a.docs-sourcelink:not(body).is-link, .content kbd:not(body).is-link { + background-color: #2e63b8; + color: #fff; } + .tag:not(body).is-info, .docstring > section > a.docs-sourcelink:not(body).is-info, .content kbd:not(body).is-info { + background-color: #209cee; + color: #fff; } + .tag:not(body).is-success, .docstring > section > a.docs-sourcelink:not(body).is-success, .content kbd:not(body).is-success { + background-color: #22c35b; + color: #fff; } + .tag:not(body).is-warning, .docstring > section > a.docs-sourcelink:not(body).is-warning, .content kbd:not(body).is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag:not(body).is-danger, .docstring > section > a.docs-sourcelink:not(body).is-danger, .content kbd:not(body).is-danger { + background-color: #da0b00; + color: #fff; } + .tag:not(body).is-normal, .docstring > section > a.docs-sourcelink:not(body).is-normal, .content kbd:not(body).is-normal { + font-size: 0.75rem; } + .tag:not(body).is-medium, .docstring > section > a.docs-sourcelink:not(body).is-medium, .content kbd:not(body).is-medium { + font-size: 1rem; } + .tag:not(body).is-large, .docstring > section > a.docs-sourcelink:not(body).is-large, .content kbd:not(body).is-large { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag:not(body).is-delete, .docstring > section > a.docs-sourcelink:not(body).is-delete, .content kbd:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before, .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag:not(body).is-delete::before, .docstring > section > a.docs-sourcelink:not(body).is-delete::before, .content kbd:not(body).is-delete::before { + height: 1px; + width: 50%; } + .tag:not(body).is-delete::after, .docstring > section > a.docs-sourcelink:not(body).is-delete::after, .content kbd:not(body).is-delete::after { + height: 50%; + width: 1px; } + .tag:not(body).is-delete:hover, .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, .content kbd:not(body).is-delete:hover, .tag:not(body).is-delete:focus, .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, .content kbd:not(body).is-delete:focus { + background-color: #e8e8e8; } + .tag:not(body).is-delete:active, .docstring > section > a.docs-sourcelink:not(body).is-delete:active, .content kbd:not(body).is-delete:active { + background-color: #dbdbdb; } + .tag:not(body).is-rounded, .docstring > section > a.docs-sourcelink:not(body).is-rounded, .content kbd:not(body).is-rounded, #documenter .docs-sidebar form.docs-search > input.tag:not(body) { + border-radius: 290486px; } + +a.tag:hover, .docstring > section > a.docs-sourcelink:hover { + text-decoration: underline; } + +.title, +.subtitle { + word-break: break-word; } + .title em, + .title span, + .subtitle em, + .subtitle span { + font-weight: inherit; } + .title sub, + .subtitle sub { + font-size: 0.75em; } + .title sup, + .subtitle sup { + font-size: 0.75em; } + .title .tag, .title .docstring > section > a.docs-sourcelink, .title .content kbd, .content .title kbd, + .subtitle .tag, + .subtitle .docstring > section > a.docs-sourcelink, + .subtitle .content kbd, + .content .subtitle kbd { + vertical-align: middle; } + +.title { + color: #363636; + font-size: 2rem; + font-weight: 600; + line-height: 1.125; } + .title strong { + color: inherit; + font-weight: inherit; } + .title + .highlight { + margin-top: -0.75rem; } + .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + .title.is-1 { + font-size: 3rem; } + .title.is-2 { + font-size: 2.5rem; } + .title.is-3 { + font-size: 2rem; } + .title.is-4 { + font-size: 1.5rem; } + .title.is-5 { + font-size: 1.25rem; } + .title.is-6 { + font-size: 1rem; } + .title.is-7 { + font-size: 0.75rem; } + +.subtitle { + color: #4a4a4a; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + .subtitle strong { + color: #363636; + font-weight: 600; } + .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + .subtitle.is-1 { + font-size: 3rem; } + .subtitle.is-2 { + font-size: 2.5rem; } + .subtitle.is-3 { + font-size: 2rem; } + .subtitle.is-4 { + font-size: 1.5rem; } + .subtitle.is-5 { + font-size: 1.25rem; } + .subtitle.is-6 { + font-size: 1rem; } + .subtitle.is-7 { + font-size: 0.75rem; } + +.heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + +.highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + .highlight pre { + overflow: auto; + max-width: 100%; } + +.number { + align-items: center; + background-color: whitesmoke; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea, .select select { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .textarea:hover, .select select:hover, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered, .is-hovered.textarea, .select select.is-hovered { + border-color: #b5b5b5; } + .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .textarea:focus, .select select:focus, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.textarea, .select select.is-focused, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .textarea:active, .select select:active, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.textarea, .select select.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .textarea[disabled], .select select[disabled], + fieldset[disabled] .input, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, + fieldset[disabled] .textarea, + fieldset[disabled] .select select, + .select fieldset[disabled] select { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #7a7a7a; } + .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, + fieldset[disabled] .input::-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder, + fieldset[disabled] .textarea::-moz-placeholder, + fieldset[disabled] .select select::-moz-placeholder, + .select fieldset[disabled] select::-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, + fieldset[disabled] .input::-webkit-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder, + fieldset[disabled] .textarea::-webkit-input-placeholder, + fieldset[disabled] .select select::-webkit-input-placeholder, + .select fieldset[disabled] select::-webkit-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, + fieldset[disabled] .input:-moz-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder, + fieldset[disabled] .textarea:-moz-placeholder, + fieldset[disabled] .select select:-moz-placeholder, + .select fieldset[disabled] select:-moz-placeholder { + color: rgba(122, 122, 122, 0.3); } + .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, + fieldset[disabled] .input:-ms-input-placeholder, + fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, + #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder, + fieldset[disabled] .textarea:-ms-input-placeholder, + fieldset[disabled] .select select:-ms-input-placeholder, + .select fieldset[disabled] select:-ms-input-placeholder { + color: rgba(122, 122, 122, 0.3); } + +.input, #documenter .docs-sidebar form.docs-search > input, .textarea { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly], .textarea[readonly] { + box-shadow: none; } + .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white, .is-white.textarea { + border-color: white; } + .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.textarea:focus, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, .is-white.is-focused.textarea, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.textarea:active, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-white.is-active, .is-white.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black, .is-black.textarea { + border-color: #0a0a0a; } + .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.textarea:focus, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, .is-black.is-focused.textarea, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.textarea:active, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-black.is-active, .is-black.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light, .is-light.textarea { + border-color: whitesmoke; } + .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.textarea:focus, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, .is-light.is-focused.textarea, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.textarea:active, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-light.is-active, .is-light.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.input, .content kbd.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .is-dark.textarea, .content kbd.textarea { + border-color: #363636; } + .is-dark.input:focus, .content kbd.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.is-focused.input, .content kbd.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.input:active, .content kbd.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.is-active.input, .content kbd.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, .is-dark.is-active.textarea, .content kbd.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.input, .docstring > section > a.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary, .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.input:focus, .docstring > section > a.input.docs-sourcelink:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.is-focused.input, .docstring > section > a.is-focused.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.input:active, .docstring > section > a.input.docs-sourcelink:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.is-active.input, .docstring > section > a.is-active.input.docs-sourcelink, #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link, .is-link.textarea { + border-color: #2e63b8; } + .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.textarea:focus, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, .is-link.is-focused.textarea, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.textarea:active, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-link.is-active, .is-link.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info, .is-info.textarea { + border-color: #209cee; } + .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.textarea:focus, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, .is-info.is-focused.textarea, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.textarea:active, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-info.is-active, .is-info.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success, .is-success.textarea { + border-color: #22c35b; } + .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.textarea:focus, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, .is-success.is-focused.textarea, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.textarea:active, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-success.is-active, .is-success.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning, .is-warning.textarea { + border-color: #ffdd57; } + .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, .is-warning.is-focused.textarea, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.textarea:active, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, .is-warning.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger, .is-danger.textarea { + border-color: #da0b00; } + .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, .is-danger.is-focused.textarea, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.textarea:active, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, .is-danger.is-active.textarea { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.input, #documenter .docs-sidebar form.docs-search > input, .is-small.textarea { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium, .is-medium.textarea { + font-size: 1.25rem; } + .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large, .is-large.textarea { + font-size: 1.5rem; } + .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth, .is-fullwidth.textarea { + display: block; + width: 100%; } + .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline, .is-inline.textarea { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.input.is-static, #documenter .docs-sidebar form.docs-search > input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + +.textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + .textarea[rows] { + height: initial; } + .textarea.has-fixed-size { + resize: none; } + +.checkbox, .radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .checkbox input, .radio input { + cursor: pointer; } + .checkbox:hover, .radio:hover { + color: #363636; } + .checkbox[disabled], .radio[disabled], + fieldset[disabled] .checkbox, + fieldset[disabled] .radio { + color: #7a7a7a; + cursor: not-allowed; } + +.radio + .radio { + margin-left: 0.5em; } + +.select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + .select:not(.is-multiple) { + height: 2.25em; } + .select:not(.is-multiple):not(.is-loading)::after { + border-color: #2e63b8; + right: 1.125em; + z-index: 4; } + .select.is-rounded select, #documenter .docs-sidebar form.docs-search > input.select select { + border-radius: 290486px; + padding-left: 1em; } + .select select { + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + .select select::-ms-expand { + display: none; } + .select select[disabled]:hover, + fieldset[disabled] .select select:hover { + border-color: whitesmoke; } + .select select:not([multiple]) { + padding-right: 2.5em; } + .select select[multiple] { + height: auto; + padding: 0; } + .select select[multiple] option { + padding: 0.5em 1em; } + .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #363636; } + .select.is-white:not(:hover)::after { + border-color: white; } + .select.is-white select { + border-color: white; } + .select.is-white select:hover, .select.is-white select.is-hovered { + border-color: #f2f2f2; } + .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + .select.is-black select { + border-color: #0a0a0a; } + .select.is-black select:hover, .select.is-black select.is-hovered { + border-color: black; } + .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .select.is-light:not(:hover)::after { + border-color: whitesmoke; } + .select.is-light select { + border-color: whitesmoke; } + .select.is-light select:hover, .select.is-light select.is-hovered { + border-color: #e8e8e8; } + .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .select.is-dark:not(:hover)::after, .content kbd.select:not(:hover)::after { + border-color: #363636; } + .select.is-dark select, .content kbd.select select { + border-color: #363636; } + .select.is-dark select:hover, .content kbd.select select:hover, .select.is-dark select.is-hovered, .content kbd.select select.is-hovered { + border-color: #292929; } + .select.is-dark select:focus, .content kbd.select select:focus, .select.is-dark select.is-focused, .content kbd.select select.is-focused, .select.is-dark select:active, .content kbd.select select:active, .select.is-dark select.is-active, .content kbd.select select.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .select.is-primary:not(:hover)::after, .docstring > section > a.select.docs-sourcelink:not(:hover)::after { + border-color: #4eb5de; } + .select.is-primary select, .docstring > section > a.select.docs-sourcelink select { + border-color: #4eb5de; } + .select.is-primary select:hover, .docstring > section > a.select.docs-sourcelink select:hover, .select.is-primary select.is-hovered, .docstring > section > a.select.docs-sourcelink select.is-hovered { + border-color: #39acda; } + .select.is-primary select:focus, .docstring > section > a.select.docs-sourcelink select:focus, .select.is-primary select.is-focused, .docstring > section > a.select.docs-sourcelink select.is-focused, .select.is-primary select:active, .docstring > section > a.select.docs-sourcelink select:active, .select.is-primary select.is-active, .docstring > section > a.select.docs-sourcelink select.is-active { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .select.is-link:not(:hover)::after { + border-color: #2e63b8; } + .select.is-link select { + border-color: #2e63b8; } + .select.is-link select:hover, .select.is-link select.is-hovered { + border-color: #2958a4; } + .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select.is-info:not(:hover)::after { + border-color: #209cee; } + .select.is-info select { + border-color: #209cee; } + .select.is-info select:hover, .select.is-info select.is-hovered { + border-color: #118fe4; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83d; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #7a7a7a; } + .select.is-fullwidth { + width: 100%; } + .select.is-fullwidth select { + width: 100%; } + .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + .select.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.select.is-loading:after { + font-size: 0.75rem; } + .select.is-loading.is-medium:after { + font-size: 1.25rem; } + .select.is-loading.is-large:after { + font-size: 1.5rem; } + +.file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + .file.is-light .file-cta { + background-color: whitesmoke; + border-color: transparent; + color: #363636; } + .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { + background-color: #eeeeee; + border-color: transparent; + color: #363636; } + .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); + color: #363636; } + .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { + background-color: #e8e8e8; + border-color: transparent; + color: #363636; } + .file.is-dark .file-cta, .content kbd.file .file-cta { + background-color: #363636; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:hover .file-cta, .content kbd.file:hover .file-cta, .file.is-dark.is-hovered .file-cta, .content kbd.file.is-hovered .file-cta { + background-color: #2f2f2f; + border-color: transparent; + color: whitesmoke; } + .file.is-dark:focus .file-cta, .content kbd.file:focus .file-cta, .file.is-dark.is-focused .file-cta, .content kbd.file.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); + color: whitesmoke; } + .file.is-dark:active .file-cta, .content kbd.file:active .file-cta, .file.is-dark.is-active .file-cta, .content kbd.file.is-active .file-cta { + background-color: #292929; + border-color: transparent; + color: whitesmoke; } + .file.is-primary .file-cta, .docstring > section > a.file.docs-sourcelink .file-cta { + background-color: #4eb5de; + border-color: transparent; + color: #fff; } + .file.is-primary:hover .file-cta, .docstring > section > a.file.docs-sourcelink:hover .file-cta, .file.is-primary.is-hovered .file-cta, .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta { + background-color: #43b1dc; + border-color: transparent; + color: #fff; } + .file.is-primary:focus .file-cta, .docstring > section > a.file.docs-sourcelink:focus .file-cta, .file.is-primary.is-focused .file-cta, .docstring > section > a.file.is-focused.docs-sourcelink .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(78, 181, 222, 0.25); + color: #fff; } + .file.is-primary:active .file-cta, .docstring > section > a.file.docs-sourcelink:active .file-cta, .file.is-primary.is-active .file-cta, .docstring > section > a.file.is-active.docs-sourcelink .file-cta { + background-color: #39acda; + border-color: transparent; + color: #fff; } + .file.is-link .file-cta { + background-color: #2e63b8; + border-color: transparent; + color: #fff; } + .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { + background-color: #2b5eae; + border-color: transparent; + color: #fff; } + .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(46, 99, 184, 0.25); + color: #fff; } + .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { + background-color: #2958a4; + border-color: transparent; + color: #fff; } + .file.is-info .file-cta { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffdb4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83d; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 0.75rem; } + .file.is-medium { + font-size: 1.25rem; } + .file.is-medium .file-icon .fa { + font-size: 21px; } + .file.is-large { + font-size: 1.5rem; } + .file.is-large .file-icon .fa { + font-size: 28px; } + .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .file.has-name.is-empty .file-cta { + border-radius: 4px; } + .file.has-name.is-empty .file-name { + display: none; } + .file.is-boxed .file-label { + flex-direction: column; } + .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + .file.is-boxed .file-name { + border-width: 0 1px 1px; } + .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + .file.is-boxed .file-icon .fa { + font-size: 21px; } + .file.is-boxed.is-small .file-icon .fa, #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa { + font-size: 14px; } + .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + .file.is-boxed.has-name .file-cta { + border-radius: 4px 4px 0 0; } + .file.is-boxed.has-name .file-name { + border-radius: 0 0 4px 4px; + border-width: 0 1px 1px; } + .file.is-centered { + justify-content: center; } + .file.is-fullwidth .file-label { + width: 100%; } + .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + .file.is-right { + justify-content: flex-end; } + .file.is-right .file-cta { + border-radius: 0 4px 4px 0; } + .file.is-right .file-name { + border-radius: 4px 0 0 4px; + border-width: 1px 0 1px 1px; + order: -1; } + +.file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + .file-label:hover .file-cta { + background-color: #eeeeee; + color: #363636; } + .file-label:hover .file-name { + border-color: #d5d5d5; } + .file-label:active .file-cta { + background-color: #e8e8e8; + color: #363636; } + .file-label:active .file-name { + border-color: #cfcfcf; } + +.file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + +.file-cta, +.file-name { + border-color: #dbdbdb; + border-radius: 4px; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + +.file-cta { + background-color: whitesmoke; + color: #4a4a4a; } + +.file-name { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + +.file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + .file-icon .fa { + font-size: 14px; } + +.label { + color: #363636; + display: block; + font-size: 1rem; + font-weight: 700; } + .label:not(:last-child) { + margin-bottom: 0.5em; } + .label.is-small, #documenter .docs-sidebar form.docs-search > input.label { + font-size: 0.75rem; } + .label.is-medium { + font-size: 1.25rem; } + .label.is-large { + font-size: 1.5rem; } + +.help { + display: block; + font-size: 0.75rem; + margin-top: 0.25rem; } + .help.is-white { + color: white; } + .help.is-black { + color: #0a0a0a; } + .help.is-light { + color: whitesmoke; } + .help.is-dark, .content kbd.help { + color: #363636; } + .help.is-primary, .docstring > section > a.help.docs-sourcelink { + color: #4eb5de; } + .help.is-link { + color: #2e63b8; } + .help.is-info { + color: #209cee; } + .help.is-success { + color: #22c35b; } + .help.is-warning { + color: #ffdd57; } + .help.is-danger { + color: #da0b00; } + +.field:not(:last-child) { + margin-bottom: 0.75rem; } + +.field.has-addons { + display: flex; + justify-content: flex-start; } + .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + .field.has-addons .control:not(:first-child):not(:last-child) .button, + .field.has-addons .control:not(:first-child):not(:last-child) .input, + .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input, + .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + .field.has-addons .control:first-child:not(:only-child) .button, + .field.has-addons .control:first-child:not(:only-child) .input, + .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:first-child:not(:only-child) .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .field.has-addons .control:last-child:not(:only-child) .button, + .field.has-addons .control:last-child:not(:only-child) .input, + .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input, + #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input, + .field.has-addons .control:last-child:not(:only-child) .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]).is-hovered, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input:not([disabled]).is-focused, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input:not([disabled]).is-active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select:not([disabled]).is-focused, + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input:not([disabled]).is-focused:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input:not([disabled]).is-active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select:not([disabled]).is-focused:hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.is-grouped.is-grouped-centered { + justify-content: center; } + .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field.is-horizontal { + display: flex; } } + +.field-label .label { + font-size: inherit; } + +@media screen and (max-width: 768px) { + .field-label { + margin-bottom: 0.5rem; } } + +@media screen and (min-width: 769px), print { + .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + .field-label.is-small, #documenter .docs-sidebar form.docs-search > input.field-label { + font-size: 0.75rem; + padding-top: 0.375em; } + .field-label.is-normal { + padding-top: 0.375em; } + .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + +.field-body .field .field { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + .field-body .field { + margin-bottom: 0; } + .field-body > .field { + flex-shrink: 1; } + .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + +.control { + box-sizing: border-box; + clear: both; + font-size: 1rem; + position: relative; + text-align: left; } + .control.has-icons-left .input:focus ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon, + .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon, + .control.has-icons-right .select:focus ~ .icon { + color: #7a7a7a; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, + .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon, + .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon, + #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon { + font-size: 0.75rem; } + .control.has-icons-left .input.is-medium ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon, + .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon, + .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + .control.has-icons-left .input.is-large ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon, + .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon, + .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + .control.has-icons-left .icon, .control.has-icons-right .icon { + color: #dbdbdb; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + .control.has-icons-left .input, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input, + .control.has-icons-left .select select { + padding-left: 2.25em; } + .control.has-icons-left .icon.is-left { + left: 0; } + .control.has-icons-right .input, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input, + .control.has-icons-right .select select { + padding-right: 2.25em; } + .control.has-icons-right .icon.is-right { + right: 0; } + .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + .control.is-loading.is-small:after, #documenter .docs-sidebar form.docs-search > input.control.is-loading:after { + font-size: 0.75rem; } + .control.is-loading.is-medium:after { + font-size: 1.25rem; } + .control.is-loading.is-large:after { + font-size: 1.5rem; } + +.breadcrumb { + font-size: 1rem; + white-space: nowrap; } + .breadcrumb a { + align-items: center; + color: #2e63b8; + display: flex; + justify-content: center; + padding: 0 0.75em; } + .breadcrumb a:hover { + color: #363636; } + .breadcrumb li { + align-items: center; + display: flex; } + .breadcrumb li:first-child a { + padding-left: 0; } + .breadcrumb li.is-active a { + color: #222222; + cursor: default; + pointer-events: none; } + .breadcrumb li + li::before { + color: #b5b5b5; + content: "\0002f"; } + .breadcrumb ul, + .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .breadcrumb .icon:first-child { + margin-right: 0.5em; } + .breadcrumb .icon:last-child { + margin-left: 0.5em; } + .breadcrumb.is-centered ol, + .breadcrumb.is-centered ul { + justify-content: center; } + .breadcrumb.is-right ol, + .breadcrumb.is-right ul { + justify-content: flex-end; } + .breadcrumb.is-small, #documenter .docs-sidebar form.docs-search > input.breadcrumb { + font-size: 0.75rem; } + .breadcrumb.is-medium { + font-size: 1.25rem; } + .breadcrumb.is-large { + font-size: 1.5rem; } + .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + +.card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #222222; + max-width: 100%; + position: relative; } + +.card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + +.card-header-title { + align-items: center; + color: #222222; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + .card-header-title.is-centered { + justify-content: center; } + +.card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + +.card-image { + display: block; + position: relative; } + +.card-content { + background-color: transparent; + padding: 1rem 1.25rem; } + +.card-footer { + background-color: transparent; + border-top: 1px solid #dbdbdb; + align-items: stretch; + display: flex; } + +.card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + .card-footer-item:not(:last-child) { + border-right: 1px solid #dbdbdb; } + +.card .media:not(:last-child) { + margin-bottom: 1.5rem; } + +.dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + +.dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + +.dropdown-content { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + +.dropdown-item { + color: #4a4a4a; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + +a.dropdown-item, +button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + a.dropdown-item:hover, + button.dropdown-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + a.dropdown-item.is-active, + button.dropdown-item.is-active { + background-color: #2e63b8; + color: #fff; } + +.dropdown-divider { + background-color: #dbdbdb; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + +.level { + align-items: center; + justify-content: space-between; } + .level code { + border-radius: 4px; } + .level img { + display: inline-block; + vertical-align: top; } + .level.is-mobile { + display: flex; } + .level.is-mobile .level-left, + .level.is-mobile .level-right { + display: flex; } + .level.is-mobile .level-left + .level-right { + margin-top: 0; } + .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level { + display: flex; } + .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + +.level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + .level-item .title, + .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + +.level-left, +.level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + .level-left .level-item.is-flexible, + .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level-left .level-item:not(:last-child), + .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + +.level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + .level-left { + display: flex; } } + +.level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + .level-right { + display: flex; } } + +.list { + background-color: white; + border-radius: 4px; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + +.list-item { + display: block; + padding: 0.5em 1em; } + .list-item:not(a) { + color: #222222; } + .list-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; } + .list-item:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; } + .list-item:not(:last-child) { + border-bottom: 1px solid #dbdbdb; } + .list-item.is-active { + background-color: #2e63b8; + color: #fff; } + +a.list-item { + background-color: whitesmoke; + cursor: pointer; } + +.media { + align-items: flex-start; + display: flex; + text-align: left; } + .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + .media .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + display: flex; + padding-top: 0.75rem; } + .media .media .content:not(:last-child), + .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + .media .media .media { + padding-top: 0.5rem; } + .media .media .media + .media { + margin-top: 0.5rem; } + .media + .media { + border-top: 1px solid rgba(219, 219, 219, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + +.media-left, +.media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + +.media-left { + margin-right: 1rem; } + +.media-right { + margin-left: 1rem; } + +.media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + +@media screen and (max-width: 768px) { + .media-content { + overflow-x: auto; } } + +.menu { + font-size: 1rem; } + .menu.is-small, #documenter .docs-sidebar form.docs-search > input.menu { + font-size: 0.75rem; } + .menu.is-medium { + font-size: 1.25rem; } + .menu.is-large { + font-size: 1.5rem; } + +.menu-list { + line-height: 1.25; } + .menu-list a { + border-radius: 2px; + color: #222222; + display: block; + padding: 0.5em 0.75em; } + .menu-list a:hover { + background-color: whitesmoke; + color: #222222; } + .menu-list a.is-active { + background-color: #2e63b8; + color: #fff; } + .menu-list li ul { + border-left: 1px solid #dbdbdb; + margin: 0.75em; + padding-left: 0.75em; } + +.menu-label { + color: #7a7a7a; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + .menu-label:not(:first-child) { + margin-top: 1em; } + .menu-label:not(:last-child) { + margin-bottom: 1em; } + +.message { + background-color: whitesmoke; + border-radius: 4px; + font-size: 1rem; } + .message strong { + color: currentColor; } + .message a:not(.button):not(.tag):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .message.is-small, #documenter .docs-sidebar form.docs-search > input.message { + font-size: 0.75rem; } + .message.is-medium { + font-size: 1.25rem; } + .message.is-large { + font-size: 1.5rem; } + .message.is-white { + background-color: white; } + .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + .message.is-black { + background-color: #fafafa; } + .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + .message.is-light { + background-color: #fafafa; } + .message.is-light .message-header { + background-color: whitesmoke; + color: #363636; } + .message.is-light .message-body { + border-color: whitesmoke; + color: #505050; } + .message.is-dark, .content kbd.message { + background-color: #fafafa; } + .message.is-dark .message-header, .content kbd.message .message-header { + background-color: #363636; + color: whitesmoke; } + .message.is-dark .message-body, .content kbd.message .message-body { + border-color: #363636; + color: #2a2a2a; } + .message.is-primary, .docstring > section > a.message.docs-sourcelink { + background-color: #f6fbfd; } + .message.is-primary .message-header, .docstring > section > a.message.docs-sourcelink .message-header { + background-color: #4eb5de; + color: #fff; } + .message.is-primary .message-body, .docstring > section > a.message.docs-sourcelink .message-body { + border-color: #4eb5de; + color: #1f556a; } + .message.is-link { + background-color: #f7f9fd; } + .message.is-link .message-header { + background-color: #2e63b8; + color: #fff; } + .message.is-link .message-body { + border-color: #2e63b8; + color: #264981; } + .message.is-info { + background-color: #f6fbfe; } + .message.is-info .message-header { + background-color: #209cee; + color: #fff; } + .message.is-info .message-body { + border-color: #209cee; + color: #12537e; } + .message.is-success { + background-color: #f6fdf9; } + .message.is-success .message-header { + background-color: #22c35b; + color: #fff; } + .message.is-success .message-body { + border-color: #22c35b; + color: #0f361d; } + .message.is-warning { + background-color: #fffdf5; } + .message.is-warning .message-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .message.is-warning .message-body { + border-color: #ffdd57; + color: #3b3108; } + .message.is-danger { + background-color: #fff5f5; } + .message.is-danger .message-header { + background-color: #da0b00; + color: #fff; } + .message.is-danger .message-body { + border-color: #da0b00; + color: #9b0c04; } + +.message-header { + align-items: center; + background-color: #222222; + border-radius: 4px 4px 0 0; + color: #fff; + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.message-body { + border-color: #dbdbdb; + border-radius: 4px; + border-style: solid; + border-width: 0 0 0 4px; + color: #222222; + padding: 1em 1.25em; } + .message-body code, + .message-body pre { + background-color: white; } + .message-body pre code { + background-color: transparent; } + +.modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + .modal.is-active { + display: flex; } + +.modal-background { + background-color: rgba(10, 10, 10, 0.86); } + +.modal-content, +.modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + .modal-content, + .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + +.modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + +.modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + +.modal-card-head, +.modal-card-foot { + align-items: center; + background-color: whitesmoke; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + +.modal-card-head { + border-bottom: 1px solid #dbdbdb; + border-top-left-radius: 6px; + border-top-right-radius: 6px; } + +.modal-card-title { + color: #222222; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + +.modal-card-foot { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 1px solid #dbdbdb; } + .modal-card-foot .button:not(:last-child) { + margin-right: 0.5em; } + +.modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + +.navbar { + background-color: white; + min-height: 3.25rem; + position: relative; + z-index: 30; } + .navbar.is-white { + background-color: white; + color: #0a0a0a; } + .navbar.is-white .navbar-brand > .navbar-item, + .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, + .navbar.is-white .navbar-brand .navbar-link:focus, + .navbar.is-white .navbar-brand .navbar-link:hover, + .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1056px) { + .navbar.is-white .navbar-start > .navbar-item, + .navbar.is-white .navbar-start .navbar-link, + .navbar.is-white .navbar-end > .navbar-item, + .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, + .navbar.is-white .navbar-start .navbar-link:focus, + .navbar.is-white .navbar-start .navbar-link:hover, + .navbar.is-white .navbar-start .navbar-link.is-active, + .navbar.is-white .navbar-end > a.navbar-item:focus, + .navbar.is-white .navbar-end > a.navbar-item:hover, + .navbar.is-white .navbar-end > a.navbar-item.is-active, + .navbar.is-white .navbar-end .navbar-link:focus, + .navbar.is-white .navbar-end .navbar-link:hover, + .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-start .navbar-link::after, + .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + .navbar.is-black { + background-color: #0a0a0a; + color: white; } + .navbar.is-black .navbar-brand > .navbar-item, + .navbar.is-black .navbar-brand .navbar-link { + color: white; } + .navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, + .navbar.is-black .navbar-brand .navbar-link:focus, + .navbar.is-black .navbar-brand .navbar-link:hover, + .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1056px) { + .navbar.is-black .navbar-start > .navbar-item, + .navbar.is-black .navbar-start .navbar-link, + .navbar.is-black .navbar-end > .navbar-item, + .navbar.is-black .navbar-end .navbar-link { + color: white; } + .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, + .navbar.is-black .navbar-start .navbar-link:focus, + .navbar.is-black .navbar-start .navbar-link:hover, + .navbar.is-black .navbar-start .navbar-link.is-active, + .navbar.is-black .navbar-end > a.navbar-item:focus, + .navbar.is-black .navbar-end > a.navbar-item:hover, + .navbar.is-black .navbar-end > a.navbar-item.is-active, + .navbar.is-black .navbar-end .navbar-link:focus, + .navbar.is-black .navbar-end .navbar-link:hover, + .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-start .navbar-link::after, + .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + .navbar.is-light { + background-color: whitesmoke; + color: #363636; } + .navbar.is-light .navbar-brand > .navbar-item, + .navbar.is-light .navbar-brand .navbar-link { + color: #363636; } + .navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, + .navbar.is-light .navbar-brand .navbar-link:focus, + .navbar.is-light .navbar-brand .navbar-link:hover, + .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-burger { + color: #363636; } + @media screen and (min-width: 1056px) { + .navbar.is-light .navbar-start > .navbar-item, + .navbar.is-light .navbar-start .navbar-link, + .navbar.is-light .navbar-end > .navbar-item, + .navbar.is-light .navbar-end .navbar-link { + color: #363636; } + .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, + .navbar.is-light .navbar-start .navbar-link:focus, + .navbar.is-light .navbar-start .navbar-link:hover, + .navbar.is-light .navbar-start .navbar-link.is-active, + .navbar.is-light .navbar-end > a.navbar-item:focus, + .navbar.is-light .navbar-end > a.navbar-item:hover, + .navbar.is-light .navbar-end > a.navbar-item.is-active, + .navbar.is-light .navbar-end .navbar-link:focus, + .navbar.is-light .navbar-end .navbar-link:hover, + .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-start .navbar-link::after, + .navbar.is-light .navbar-end .navbar-link::after { + border-color: #363636; } + .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #e8e8e8; + color: #363636; } + .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #363636; } } + .navbar.is-dark, .content kbd.navbar { + background-color: #363636; + color: whitesmoke; } + .navbar.is-dark .navbar-brand > .navbar-item, .content kbd.navbar .navbar-brand > .navbar-item, + .navbar.is-dark .navbar-brand .navbar-link, + .content kbd.navbar .navbar-brand .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-brand > a.navbar-item:focus, .content kbd.navbar .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .content kbd.navbar .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, .content kbd.navbar .navbar-brand > a.navbar-item.is-active, + .navbar.is-dark .navbar-brand .navbar-link:focus, + .content kbd.navbar .navbar-brand .navbar-link:focus, + .navbar.is-dark .navbar-brand .navbar-link:hover, + .content kbd.navbar .navbar-brand .navbar-link:hover, + .navbar.is-dark .navbar-brand .navbar-link.is-active, + .content kbd.navbar .navbar-brand .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-brand .navbar-link::after, .content kbd.navbar .navbar-brand .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-burger, .content kbd.navbar .navbar-burger { + color: whitesmoke; } + @media screen and (min-width: 1056px) { + .navbar.is-dark .navbar-start > .navbar-item, .content kbd.navbar .navbar-start > .navbar-item, + .navbar.is-dark .navbar-start .navbar-link, + .content kbd.navbar .navbar-start .navbar-link, + .navbar.is-dark .navbar-end > .navbar-item, + .content kbd.navbar .navbar-end > .navbar-item, + .navbar.is-dark .navbar-end .navbar-link, + .content kbd.navbar .navbar-end .navbar-link { + color: whitesmoke; } + .navbar.is-dark .navbar-start > a.navbar-item:focus, .content kbd.navbar .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .content kbd.navbar .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, .content kbd.navbar .navbar-start > a.navbar-item.is-active, + .navbar.is-dark .navbar-start .navbar-link:focus, + .content kbd.navbar .navbar-start .navbar-link:focus, + .navbar.is-dark .navbar-start .navbar-link:hover, + .content kbd.navbar .navbar-start .navbar-link:hover, + .navbar.is-dark .navbar-start .navbar-link.is-active, + .content kbd.navbar .navbar-start .navbar-link.is-active, + .navbar.is-dark .navbar-end > a.navbar-item:focus, + .content kbd.navbar .navbar-end > a.navbar-item:focus, + .navbar.is-dark .navbar-end > a.navbar-item:hover, + .content kbd.navbar .navbar-end > a.navbar-item:hover, + .navbar.is-dark .navbar-end > a.navbar-item.is-active, + .content kbd.navbar .navbar-end > a.navbar-item.is-active, + .navbar.is-dark .navbar-end .navbar-link:focus, + .content kbd.navbar .navbar-end .navbar-link:focus, + .navbar.is-dark .navbar-end .navbar-link:hover, + .content kbd.navbar .navbar-end .navbar-link:hover, + .navbar.is-dark .navbar-end .navbar-link.is-active, + .content kbd.navbar .navbar-end .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-start .navbar-link::after, .content kbd.navbar .navbar-start .navbar-link::after, + .navbar.is-dark .navbar-end .navbar-link::after, + .content kbd.navbar .navbar-end .navbar-link::after { + border-color: whitesmoke; } + .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link, + .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #292929; + color: whitesmoke; } + .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, .content kbd.navbar .navbar-dropdown a.navbar-item.is-active { + background-color: #363636; + color: whitesmoke; } } + .navbar.is-primary, .docstring > section > a.navbar.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .navbar.is-primary .navbar-brand > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item, + .navbar.is-primary .navbar-brand .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-brand > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active, + .navbar.is-primary .navbar-brand .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus, + .navbar.is-primary .navbar-brand .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover, + .navbar.is-primary .navbar-brand .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-brand .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-burger, .docstring > section > a.navbar.docs-sourcelink .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-primary .navbar-start > .navbar-item, .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item, + .navbar.is-primary .navbar-start .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link, + .navbar.is-primary .navbar-end > .navbar-item, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item, + .navbar.is-primary .navbar-end .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-start > a.navbar-item:focus, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active, + .navbar.is-primary .navbar-start .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus, + .navbar.is-primary .navbar-start .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover, + .navbar.is-primary .navbar-start .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active, + .navbar.is-primary .navbar-end > a.navbar-item:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus, + .navbar.is-primary .navbar-end > a.navbar-item:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover, + .navbar.is-primary .navbar-end > a.navbar-item.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active, + .navbar.is-primary .navbar-end .navbar-link:focus, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus, + .navbar.is-primary .navbar-end .navbar-link:hover, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover, + .navbar.is-primary .navbar-end .navbar-link.is-active, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-start .navbar-link::after, .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after, + .navbar.is-primary .navbar-end .navbar-link::after, + .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link, + .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #39acda; + color: #fff; } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active { + background-color: #4eb5de; + color: #fff; } } + .navbar.is-link { + background-color: #2e63b8; + color: #fff; } + .navbar.is-link .navbar-brand > .navbar-item, + .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, + .navbar.is-link .navbar-brand .navbar-link:focus, + .navbar.is-link .navbar-brand .navbar-link:hover, + .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-link .navbar-start > .navbar-item, + .navbar.is-link .navbar-start .navbar-link, + .navbar.is-link .navbar-end > .navbar-item, + .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, + .navbar.is-link .navbar-start .navbar-link:focus, + .navbar.is-link .navbar-start .navbar-link:hover, + .navbar.is-link .navbar-start .navbar-link.is-active, + .navbar.is-link .navbar-end > a.navbar-item:focus, + .navbar.is-link .navbar-end > a.navbar-item:hover, + .navbar.is-link .navbar-end > a.navbar-item.is-active, + .navbar.is-link .navbar-end .navbar-link:focus, + .navbar.is-link .navbar-end .navbar-link:hover, + .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-start .navbar-link::after, + .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2958a4; + color: #fff; } + .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #2e63b8; + color: #fff; } } + .navbar.is-info { + background-color: #209cee; + color: #fff; } + .navbar.is-info .navbar-brand > .navbar-item, + .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, + .navbar.is-info .navbar-brand .navbar-link:focus, + .navbar.is-info .navbar-brand .navbar-link:hover, + .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 whitesmoke; } + .navbar.is-fixed-bottom, .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom { + bottom: 0; } + .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 whitesmoke; } + .navbar.is-fixed-top { + top: 0; } + +html.has-navbar-fixed-top, +body.has-navbar-fixed-top { + padding-top: 3.25rem; } + +html.has-navbar-fixed-bottom, +body.has-navbar-fixed-bottom { + padding-bottom: 3.25rem; } + +.navbar-brand, +.navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 3.25rem; } + +.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { + background-color: transparent; } + +.navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + +.navbar-burger { + color: #4a4a4a; + cursor: pointer; + display: block; + height: 3.25rem; + position: relative; + width: 3.25rem; + margin-left: auto; } + .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + +.navbar-menu { + display: none; } + +.navbar-item, +.navbar-link { + color: #4a4a4a; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + .navbar-item .icon:only-child, + .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + +a.navbar-item, +.navbar-link { + cursor: pointer; } + a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, + .navbar-link:focus, + .navbar-link:focus-within, + .navbar-link:hover, + .navbar-link.is-active { + background-color: #fafafa; + color: #2e63b8; } + +.navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + .navbar-item img { + max-height: 1.75rem; } + .navbar-item.has-dropdown { + padding: 0; } + .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 3.25rem; + padding-bottom: calc(0.5rem - 1px); } + .navbar-item.is-tab:focus, .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #2e63b8; } + .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #2e63b8; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #2e63b8; + padding-bottom: calc(0.5rem - 3px); } + +.navbar-content { + flex-grow: 1; + flex-shrink: 1; } + +.navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + .navbar-link:not(.is-arrowless)::after { + border-color: #2e63b8; + margin-top: -0.375em; + right: 1.125em; } + +.navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + +.navbar-divider { + background-color: whitesmoke; + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + +@media screen and (max-width: 1055px) { + .navbar > .container { + display: block; } + .navbar-brand .navbar-item, + .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + .navbar-link::after { + display: none; } + .navbar-menu { + background-color: white; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + .navbar-menu.is-active { + display: block; } + .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-touch { + bottom: 0; } + .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-touch { + top: 0; } + .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 3.25rem); + overflow: auto; } + html.has-navbar-fixed-top-touch, + body.has-navbar-fixed-top-touch { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-touch, + body.has-navbar-fixed-bottom-touch { + padding-bottom: 3.25rem; } } + +@media screen and (min-width: 1056px) { + .navbar, + .navbar-menu, + .navbar-start, + .navbar-end { + align-items: stretch; + display: flex; } + .navbar { + min-height: 3.25rem; } + .navbar.is-spaced { + padding: 1rem 2rem; } + .navbar.is-spaced .navbar-start, + .navbar.is-spaced .navbar-end { + align-items: center; } + .navbar.is-spaced a.navbar-item, + .navbar.is-spaced .navbar-link { + border-radius: 4px; } + .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, + .navbar.is-transparent .navbar-link:focus, + .navbar.is-transparent .navbar-link:hover, + .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar-burger { + display: none; } + .navbar-item, + .navbar-link { + align-items: center; + display: flex; } + .navbar-item { + display: flex; } + .navbar-item.has-dropdown { + align-items: stretch; } + .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 2px solid #dbdbdb; + border-radius: 6px 6px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + .navbar-start { + justify-content: flex-start; + margin-right: auto; } + .navbar-end { + justify-content: flex-end; + margin-left: auto; } + .navbar-dropdown { + background-color: white; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top: 2px solid #dbdbdb; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; } + .navbar-dropdown a.navbar-item.is-active { + background-color: whitesmoke; + color: #2e63b8; } + .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { + border-radius: 6px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + .navbar-dropdown.is-right { + left: auto; + right: 0; } + .navbar-divider { + display: block; } + .navbar > .container .navbar-brand, + .container > .navbar .navbar-brand { + margin-left: -.75rem; } + .navbar > .container .navbar-menu, + .container > .navbar .navbar-menu { + margin-right: -.75rem; } + .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-desktop { + bottom: 0; } + .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-desktop { + top: 0; } + html.has-navbar-fixed-top-desktop, + body.has-navbar-fixed-top-desktop { + padding-top: 3.25rem; } + html.has-navbar-fixed-bottom-desktop, + body.has-navbar-fixed-bottom-desktop { + padding-bottom: 3.25rem; } + html.has-spaced-navbar-fixed-top, + body.has-spaced-navbar-fixed-top { + padding-top: 5.25rem; } + html.has-spaced-navbar-fixed-bottom, + body.has-spaced-navbar-fixed-bottom { + padding-bottom: 5.25rem; } + a.navbar-item.is-active, + .navbar-link.is-active { + color: #0a0a0a; } + a.navbar-item.is-active:not(:focus):not(:hover), + .navbar-link.is-active:not(:focus):not(:hover) { + background-color: transparent; } + .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #fafafa; } } + +.hero.is-fullheight-with-navbar { + min-height: calc(100vh - 3.25rem); } + +.pagination { + font-size: 1rem; + margin: -0.25rem; } + .pagination.is-small, #documenter .docs-sidebar form.docs-search > input.pagination { + font-size: 0.75rem; } + .pagination.is-medium { + font-size: 1.25rem; } + .pagination.is-large { + font-size: 1.5rem; } + .pagination.is-rounded .pagination-previous, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous, + .pagination.is-rounded .pagination-next, + #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + .pagination.is-rounded .pagination-link, #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link { + border-radius: 290486px; } + +.pagination, +.pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + font-size: 1em; + justify-content: center; + margin: 0.25rem; + padding-left: 0.5em; + padding-right: 0.5em; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link { + border-color: #dbdbdb; + color: #363636; + min-width: 2.25em; } + .pagination-previous:hover, + .pagination-next:hover, + .pagination-link:hover { + border-color: #b5b5b5; + color: #363636; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus { + border-color: #2e63b8; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #7a7a7a; + opacity: 0.5; } + +.pagination-previous, +.pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + +.pagination-link.is-current { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; } + +.pagination-ellipsis { + color: #b5b5b5; + pointer-events: none; } + +.pagination-list { + flex-wrap: wrap; } + +@media screen and (max-width: 768px) { + .pagination { + flex-wrap: wrap; } + .pagination-previous, + .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + +@media screen and (min-width: 769px), print { + .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + .pagination-previous { + order: 2; } + .pagination-next { + order: 3; } + .pagination { + justify-content: space-between; } + .pagination.is-centered .pagination-previous { + order: 1; } + .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + .pagination.is-centered .pagination-next { + order: 3; } + .pagination.is-right .pagination-previous { + order: 1; } + .pagination.is-right .pagination-next { + order: 2; } + .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + +.panel { + font-size: 1rem; } + .panel:not(:last-child) { + margin-bottom: 1.5rem; } + +.panel-heading, +.panel-tabs, +.panel-block { + border-bottom: 1px solid #dbdbdb; + border-left: 1px solid #dbdbdb; + border-right: 1px solid #dbdbdb; } + .panel-heading:first-child, + .panel-tabs:first-child, + .panel-block:first-child { + border-top: 1px solid #dbdbdb; } + +.panel-heading { + background-color: whitesmoke; + border-radius: 4px 4px 0 0; + color: #222222; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + +.panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + .panel-tabs a { + border-bottom: 1px solid #dbdbdb; + margin-bottom: -1px; + padding: 0.5em; } + .panel-tabs a.is-active { + border-bottom-color: #4a4a4a; + color: #363636; } + +.panel-list a { + color: #222222; } + .panel-list a:hover { + color: #2e63b8; } + +.panel-block { + align-items: center; + color: #222222; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + .panel-block.is-wrapped { + flex-wrap: wrap; } + .panel-block.is-active { + border-left-color: #2e63b8; + color: #363636; } + .panel-block.is-active .panel-icon { + color: #2e63b8; } + +a.panel-block, +label.panel-block { + cursor: pointer; } + a.panel-block:hover, + label.panel-block:hover { + background-color: whitesmoke; } + +.panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: #7a7a7a; + margin-right: 0.75em; } + .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + +.tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 1rem; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + .tabs a { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #222222; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + .tabs a:hover { + border-bottom-color: #222222; + color: #222222; } + .tabs li { + display: block; } + .tabs li.is-active a { + border-bottom-color: #2e63b8; + color: #2e63b8; } + .tabs ul { + align-items: center; + border-bottom-color: #dbdbdb; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + .tabs ul.is-left { + padding-right: 0.75em; } + .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + .tabs .icon:first-child { + margin-right: 0.5em; } + .tabs .icon:last-child { + margin-left: 0.5em; } + .tabs.is-centered ul { + justify-content: center; } + .tabs.is-right ul { + justify-content: flex-end; } + .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 4px 4px 0 0; } + .tabs.is-boxed a:hover { + background-color: whitesmoke; + border-bottom-color: #dbdbdb; } + .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #dbdbdb; + border-bottom-color: transparent !important; } + .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + .tabs.is-toggle a { + border-color: #dbdbdb; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + .tabs.is-toggle a:hover { + background-color: whitesmoke; + border-color: #b5b5b5; + z-index: 2; } + .tabs.is-toggle li + li { + margin-left: -1px; } + .tabs.is-toggle li:first-child a { + border-radius: 4px 0 0 4px; } + .tabs.is-toggle li:last-child a { + border-radius: 0 4px 4px 0; } + .tabs.is-toggle li.is-active a { + background-color: #2e63b8; + border-color: #2e63b8; + color: #fff; + z-index: 1; } + .tabs.is-toggle ul { + border-bottom: none; } + .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + .tabs.is-small, #documenter .docs-sidebar form.docs-search > input.tabs { + font-size: 0.75rem; } + .tabs.is-medium { + font-size: 1.25rem; } + .tabs.is-large { + font-size: 1.5rem; } + +.column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > .column.is-narrow { + flex: none; } + .columns.is-mobile > .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > .column.is-0 { + flex: none; + width: 0%; } + .columns.is-mobile > .column.is-offset-0 { + margin-left: 0%; } + .columns.is-mobile > .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + .column.is-narrow-mobile { + flex: none; } + .column.is-full-mobile { + flex: none; + width: 100%; } + .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + .column.is-half-mobile { + flex: none; + width: 50%; } + .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + .column.is-offset-half-mobile { + margin-left: 50%; } + .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + .column.is-0-mobile { + flex: none; + width: 0%; } + .column.is-offset-0-mobile { + margin-left: 0%; } + .column.is-1-mobile { + flex: none; + width: 8.33333%; } + .column.is-offset-1-mobile { + margin-left: 8.33333%; } + .column.is-2-mobile { + flex: none; + width: 16.66667%; } + .column.is-offset-2-mobile { + margin-left: 16.66667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.33333%; } + .column.is-offset-4-mobile { + margin-left: 33.33333%; } + .column.is-5-mobile { + flex: none; + width: 41.66667%; } + .column.is-offset-5-mobile { + margin-left: 41.66667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.33333%; } + .column.is-offset-7-mobile { + margin-left: 58.33333%; } + .column.is-8-mobile { + flex: none; + width: 66.66667%; } + .column.is-offset-8-mobile { + margin-left: 66.66667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.33333%; } + .column.is-offset-10-mobile { + margin-left: 83.33333%; } + .column.is-11-mobile { + flex: none; + width: 91.66667%; } + .column.is-offset-11-mobile { + margin-left: 91.66667%; } + .column.is-12-mobile { + flex: none; + width: 100%; } + .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + .column.is-narrow, .column.is-narrow-tablet { + flex: none; } + .column.is-full, .column.is-full-tablet { + flex: none; + width: 100%; } + .column.is-three-quarters, .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + .column.is-two-thirds, .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + .column.is-half, .column.is-half-tablet { + flex: none; + width: 50%; } + .column.is-one-third, .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + .column.is-one-quarter, .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + .column.is-one-fifth, .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + .column.is-two-fifths, .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + .column.is-three-fifths, .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + .column.is-four-fifths, .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + .column.is-offset-half, .column.is-offset-half-tablet { + margin-left: 50%; } + .column.is-offset-one-third, .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + .column.is-0, .column.is-0-tablet { + flex: none; + width: 0%; } + .column.is-offset-0, .column.is-offset-0-tablet { + margin-left: 0%; } + .column.is-1, .column.is-1-tablet { + flex: none; + width: 8.33333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.33333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.66667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.66667%; } + .column.is-3, .column.is-3-tablet { + flex: none; + width: 25%; } + .column.is-offset-3, .column.is-offset-3-tablet { + margin-left: 25%; } + .column.is-4, .column.is-4-tablet { + flex: none; + width: 33.33333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.33333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.66667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.66667%; } + .column.is-6, .column.is-6-tablet { + flex: none; + width: 50%; } + .column.is-offset-6, .column.is-offset-6-tablet { + margin-left: 50%; } + .column.is-7, .column.is-7-tablet { + flex: none; + width: 58.33333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.33333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.66667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.66667%; } + .column.is-9, .column.is-9-tablet { + flex: none; + width: 75%; } + .column.is-offset-9, .column.is-offset-9-tablet { + margin-left: 75%; } + .column.is-10, .column.is-10-tablet { + flex: none; + width: 83.33333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.33333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.66667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.66667%; } + .column.is-12, .column.is-12-tablet { + flex: none; + width: 100%; } + .column.is-offset-12, .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1055px) { + .column.is-narrow-touch { + flex: none; } + .column.is-full-touch { + flex: none; + width: 100%; } + .column.is-three-quarters-touch { + flex: none; + width: 75%; } + .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + .column.is-half-touch { + flex: none; + width: 50%; } + .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-touch { + flex: none; + width: 25%; } + .column.is-one-fifth-touch { + flex: none; + width: 20%; } + .column.is-two-fifths-touch { + flex: none; + width: 40%; } + .column.is-three-fifths-touch { + flex: none; + width: 60%; } + .column.is-four-fifths-touch { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-touch { + margin-left: 75%; } + .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + .column.is-offset-half-touch { + margin-left: 50%; } + .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-touch { + margin-left: 25%; } + .column.is-offset-one-fifth-touch { + margin-left: 20%; } + .column.is-offset-two-fifths-touch { + margin-left: 40%; } + .column.is-offset-three-fifths-touch { + margin-left: 60%; } + .column.is-offset-four-fifths-touch { + margin-left: 80%; } + .column.is-0-touch { + flex: none; + width: 0%; } + .column.is-offset-0-touch { + margin-left: 0%; } + .column.is-1-touch { + flex: none; + width: 8.33333%; } + .column.is-offset-1-touch { + margin-left: 8.33333%; } + .column.is-2-touch { + flex: none; + width: 16.66667%; } + .column.is-offset-2-touch { + margin-left: 16.66667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.33333%; } + .column.is-offset-4-touch { + margin-left: 33.33333%; } + .column.is-5-touch { + flex: none; + width: 41.66667%; } + .column.is-offset-5-touch { + margin-left: 41.66667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.33333%; } + .column.is-offset-7-touch { + margin-left: 58.33333%; } + .column.is-8-touch { + flex: none; + width: 66.66667%; } + .column.is-offset-8-touch { + margin-left: 66.66667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.33333%; } + .column.is-offset-10-touch { + margin-left: 83.33333%; } + .column.is-11-touch { + flex: none; + width: 91.66667%; } + .column.is-offset-11-touch { + margin-left: 91.66667%; } + .column.is-12-touch { + flex: none; + width: 100%; } + .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1056px) { + .column.is-narrow-desktop { + flex: none; } + .column.is-full-desktop { + flex: none; + width: 100%; } + .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + .column.is-half-desktop { + flex: none; + width: 50%; } + .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + .column.is-offset-half-desktop { + margin-left: 50%; } + .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + .column.is-0-desktop { + flex: none; + width: 0%; } + .column.is-offset-0-desktop { + margin-left: 0%; } + .column.is-1-desktop { + flex: none; + width: 8.33333%; } + .column.is-offset-1-desktop { + margin-left: 8.33333%; } + .column.is-2-desktop { + flex: none; + width: 16.66667%; } + .column.is-offset-2-desktop { + margin-left: 16.66667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.33333%; } + .column.is-offset-4-desktop { + margin-left: 33.33333%; } + .column.is-5-desktop { + flex: none; + width: 41.66667%; } + .column.is-offset-5-desktop { + margin-left: 41.66667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.33333%; } + .column.is-offset-7-desktop { + margin-left: 58.33333%; } + .column.is-8-desktop { + flex: none; + width: 66.66667%; } + .column.is-offset-8-desktop { + margin-left: 66.66667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.33333%; } + .column.is-offset-10-desktop { + margin-left: 83.33333%; } + .column.is-11-desktop { + flex: none; + width: 91.66667%; } + .column.is-offset-11-desktop { + margin-left: 91.66667%; } + .column.is-12-desktop { + flex: none; + width: 100%; } + .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1216px) { + .column.is-narrow-widescreen { + flex: none; } + .column.is-full-widescreen { + flex: none; + width: 100%; } + .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + .column.is-half-widescreen { + flex: none; + width: 50%; } + .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + .column.is-offset-half-widescreen { + margin-left: 50%; } + .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + .column.is-0-widescreen { + flex: none; + width: 0%; } + .column.is-offset-0-widescreen { + margin-left: 0%; } + .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + .column.is-12-widescreen { + flex: none; + width: 100%; } + .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1408px) { + .column.is-narrow-fullhd { + flex: none; } + .column.is-full-fullhd { + flex: none; + width: 100%; } + .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + .column.is-half-fullhd { + flex: none; + width: 50%; } + .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + .column.is-offset-half-fullhd { + margin-left: 50%; } + .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + .column.is-0-fullhd { + flex: none; + width: 0%; } + .column.is-offset-0-fullhd { + margin-left: 0%; } + .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + .column.is-12-fullhd { + flex: none; + width: 100%; } + .column.is-offset-12-fullhd { + margin-left: 100%; } } + +.columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .columns:last-child { + margin-bottom: -0.75rem; } + .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + .columns.is-centered { + justify-content: center; } + .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + .columns.is-gapless:last-child { + margin-bottom: 0; } + .columns.is-mobile { + display: flex; } + .columns.is-multiline { + flex-wrap: wrap; } + .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1056px) { + .columns.is-desktop { + display: flex; } } + +.columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1055px) { + .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1055px) { + .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) { + .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1056px) and (max-width: 1215px) { + .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) { + .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1216px) and (max-width: 1407px) { + .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1408px) { + .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + +.tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + .tile.is-child { + margin: 0 !important; } + .tile.is-parent { + padding: 0.75rem; } + .tile.is-vertical { + flex-direction: column; } + .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + .tile:not(.is-child) { + display: flex; } + .tile.is-1 { + flex: none; + width: 8.33333%; } + .tile.is-2 { + flex: none; + width: 16.66667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.33333%; } + .tile.is-5 { + flex: none; + width: 41.66667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.33333%; } + .tile.is-8 { + flex: none; + width: 66.66667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.33333%; } + .tile.is-11 { + flex: none; + width: 91.66667%; } + .tile.is-12 { + flex: none; + width: 100%; } } + +.hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + .hero .navbar { + background: none; } + .hero .tabs ul { + border-bottom: none; } + .hero.is-white { + background-color: white; + color: #0a0a0a; } + .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-white strong { + color: inherit; } + .hero.is-white .title { + color: #0a0a0a; } + .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + .hero.is-white .subtitle a:not(.button), + .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1055px) { + .hero.is-white .navbar-menu { + background-color: white; } } + .hero.is-white .navbar-item, + .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, + .hero.is-white .navbar-link:hover, + .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + .hero.is-white .tabs a:hover { + opacity: 1; } + .hero.is-white .tabs li.is-active a { + opacity: 1; } + .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + .hero.is-black { + background-color: #0a0a0a; + color: white; } + .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-black strong { + color: inherit; } + .hero.is-black .title { + color: white; } + .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-black .subtitle a:not(.button), + .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1055px) { + .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + .hero.is-black .navbar-item, + .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, + .hero.is-black .navbar-link:hover, + .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + .hero.is-black .tabs a:hover { + opacity: 1; } + .hero.is-black .tabs li.is-active a { + opacity: 1; } + .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { + color: white; } + .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + .hero.is-light { + background-color: whitesmoke; + color: #363636; } + .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-light strong { + color: inherit; } + .hero.is-light .title { + color: #363636; } + .hero.is-light .subtitle { + color: rgba(54, 54, 54, 0.9); } + .hero.is-light .subtitle a:not(.button), + .hero.is-light .subtitle strong { + color: #363636; } + @media screen and (max-width: 1055px) { + .hero.is-light .navbar-menu { + background-color: whitesmoke; } } + .hero.is-light .navbar-item, + .hero.is-light .navbar-link { + color: rgba(54, 54, 54, 0.7); } + .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, + .hero.is-light .navbar-link:hover, + .hero.is-light .navbar-link.is-active { + background-color: #e8e8e8; + color: #363636; } + .hero.is-light .tabs a { + color: #363636; + opacity: 0.9; } + .hero.is-light .tabs a:hover { + opacity: 1; } + .hero.is-light .tabs li.is-active a { + opacity: 1; } + .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { + color: #363636; } + .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #363636; + border-color: #363636; + color: whitesmoke; } + .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } } + .hero.is-dark, .content kbd.hero { + background-color: #363636; + color: whitesmoke; } + .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-dark strong, + .content kbd.hero strong { + color: inherit; } + .hero.is-dark .title, .content kbd.hero .title { + color: whitesmoke; } + .hero.is-dark .subtitle, .content kbd.hero .subtitle { + color: rgba(245, 245, 245, 0.9); } + .hero.is-dark .subtitle a:not(.button), .content kbd.hero .subtitle a:not(.button), + .hero.is-dark .subtitle strong, + .content kbd.hero .subtitle strong { + color: whitesmoke; } + @media screen and (max-width: 1055px) { + .hero.is-dark .navbar-menu, .content kbd.hero .navbar-menu { + background-color: #363636; } } + .hero.is-dark .navbar-item, .content kbd.hero .navbar-item, + .hero.is-dark .navbar-link, + .content kbd.hero .navbar-link { + color: rgba(245, 245, 245, 0.7); } + .hero.is-dark a.navbar-item:hover, .content kbd.hero a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, .content kbd.hero a.navbar-item.is-active, + .hero.is-dark .navbar-link:hover, + .content kbd.hero .navbar-link:hover, + .hero.is-dark .navbar-link.is-active, + .content kbd.hero .navbar-link.is-active { + background-color: #292929; + color: whitesmoke; } + .hero.is-dark .tabs a, .content kbd.hero .tabs a { + color: whitesmoke; + opacity: 0.9; } + .hero.is-dark .tabs a:hover, .content kbd.hero .tabs a:hover { + opacity: 1; } + .hero.is-dark .tabs li.is-active a, .content kbd.hero .tabs li.is-active a { + opacity: 1; } + .hero.is-dark .tabs.is-boxed a, .content kbd.hero .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a, .content kbd.hero .tabs.is-toggle a { + color: whitesmoke; } + .hero.is-dark .tabs.is-boxed a:hover, .content kbd.hero .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover, .content kbd.hero .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-dark .tabs.is-boxed li.is-active a, .content kbd.hero .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .content kbd.hero .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover, .content kbd.hero .tabs.is-toggle li.is-active a:hover { + background-color: whitesmoke; + border-color: whitesmoke; + color: #363636; } + .hero.is-dark.is-bold, .content kbd.hero.is-bold { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } + @media screen and (max-width: 768px) { + .hero.is-dark.is-bold .navbar-menu, .content kbd.hero.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } } + .hero.is-primary, .docstring > section > a.hero.docs-sourcelink { + background-color: #4eb5de; + color: #fff; } + .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-primary strong, + .docstring > section > a.hero.docs-sourcelink strong { + color: inherit; } + .hero.is-primary .title, .docstring > section > a.hero.docs-sourcelink .title { + color: #fff; } + .hero.is-primary .subtitle, .docstring > section > a.hero.docs-sourcelink .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-primary .subtitle a:not(.button), .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button), + .hero.is-primary .subtitle strong, + .docstring > section > a.hero.docs-sourcelink .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-primary .navbar-menu, .docstring > section > a.hero.docs-sourcelink .navbar-menu { + background-color: #4eb5de; } } + .hero.is-primary .navbar-item, .docstring > section > a.hero.docs-sourcelink .navbar-item, + .hero.is-primary .navbar-link, + .docstring > section > a.hero.docs-sourcelink .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-primary a.navbar-item:hover, .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active, + .hero.is-primary .navbar-link:hover, + .docstring > section > a.hero.docs-sourcelink .navbar-link:hover, + .hero.is-primary .navbar-link.is-active, + .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active { + background-color: #39acda; + color: #fff; } + .hero.is-primary .tabs a, .docstring > section > a.hero.docs-sourcelink .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-primary .tabs a:hover, .docstring > section > a.hero.docs-sourcelink .tabs a:hover { + opacity: 1; } + .hero.is-primary .tabs li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a { + opacity: 1; } + .hero.is-primary .tabs.is-boxed a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a { + color: #fff; } + .hero.is-primary .tabs.is-boxed a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-primary .tabs.is-boxed li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83d; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + opacity: 1; } + .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { + color: #fff; } + .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #da0b00; } + .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } + @media screen and (max-width: 768px) { + .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } } + .hero.is-small .hero-body, #documenter .docs-sidebar form.docs-search > input.hero .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + .hero.is-halfheight { + min-height: 50vh; } + .hero.is-fullheight { + min-height: 100vh; } + +.hero-video { + overflow: hidden; } + .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + .hero-video { + display: none; } } + +.hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + .hero-buttons .button { + display: flex; } + .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + .hero-buttons { + display: flex; + justify-content: center; } + .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + +.hero-head, +.hero-foot { + flex-grow: 0; + flex-shrink: 0; } + +.hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + +.section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1056px) { + .section.is-medium { + padding: 9rem 1.5rem; } + .section.is-large { + padding: 18rem 1.5rem; } } + +.footer { + background-color: #fafafa; + padding: 3rem 1.5rem 6rem; } + +h1 .docs-heading-anchor, h1 .docs-heading-anchor:hover, h1 .docs-heading-anchor:visited, h2 .docs-heading-anchor, h2 .docs-heading-anchor:hover, h2 .docs-heading-anchor:visited, h3 .docs-heading-anchor, h3 .docs-heading-anchor:hover, h3 .docs-heading-anchor:visited, h4 .docs-heading-anchor, h4 .docs-heading-anchor:hover, h4 .docs-heading-anchor:visited, h5 .docs-heading-anchor, h5 .docs-heading-anchor:hover, h5 .docs-heading-anchor:visited, h6 .docs-heading-anchor, h6 .docs-heading-anchor:hover, h6 .docs-heading-anchor:visited { + color: #222222; } + +h1 .docs-heading-anchor-permalink, h2 .docs-heading-anchor-permalink, h3 .docs-heading-anchor-permalink, h4 .docs-heading-anchor-permalink, h5 .docs-heading-anchor-permalink, h6 .docs-heading-anchor-permalink { + visibility: hidden; + vertical-align: middle; + margin-left: 0.5em; + font-size: 0.7rem; } + h1 .docs-heading-anchor-permalink::before, h2 .docs-heading-anchor-permalink::before, h3 .docs-heading-anchor-permalink::before, h4 .docs-heading-anchor-permalink::before, h5 .docs-heading-anchor-permalink::before, h6 .docs-heading-anchor-permalink::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f0c1"; } + +h1:hover .docs-heading-anchor-permalink, h2:hover .docs-heading-anchor-permalink, h3:hover .docs-heading-anchor-permalink, h4:hover .docs-heading-anchor-permalink, h5:hover .docs-heading-anchor-permalink, h6:hover .docs-heading-anchor-permalink { + visibility: visible; } + +.docs-dark-only { + display: none !important; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 0.75rem; } + .admonition.is-medium { + font-size: 1.25rem; } + .admonition.is-large { + font-size: 1.5rem; } + .admonition.is-default { + background-color: #b5b5b5; + border-color: #363636; } + .admonition.is-default > .admonition-header { + background-color: #363636; + color: #fff; } + .admonition.is-default > .admonition-body { + color: #fff; } + .admonition.is-info { + background-color: #b8dffa; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #9beeb8; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ff857e; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: #fff; } + .admonition.is-compat { + background-color: #99e6f0; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75em; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 1em 1.25em; } + .admonition-body pre { + background-color: whitesmoke; } + .admonition-body code { + background-color: rgba(0, 0, 0, 0.05); } + +.docstring { + margin-bottom: 1em; + background-color: transparent; + border: 1px solid #dbdbdb; + box-shadow: 2px 2px 3px rgba(10, 10, 10, 0.1); + max-width: 100%; } + .docstring > header { + display: flex; + flex-grow: 1; + align-items: stretch; + padding: 0.75rem; + background-color: whitesmoke; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + box-shadow: none; + border-bottom: 1px solid #dbdbdb; } + .docstring > header code { + background-color: transparent; } + .docstring > header .docstring-binding { + margin-right: 0.3em; } + .docstring > header .docstring-category { + margin-left: 0.3em; } + .docstring > section { + position: relative; + padding: 1rem 1.25rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.625rem; + bottom: 0.5rem; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #222222; } + +.content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + +.content blockquote > ul:first-child, .content blockquote > ol:first-child, .content .admonition-body > ul:first-child, .content .admonition-body > ol:first-child { + margin-top: 0; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; + padding: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +/* This file contain the overall layout. + * + * The main container is
    that is identified by id #documenter. + */ +#documenter .docs-main > article { + overflow-wrap: break-word; } + #documenter .docs-main > article .math-container { + overflow-x: auto; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: white; + border-bottom: 1px solid #dbdbdb; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + #documenter .docs-main header.docs-navbar .docs-right { + display: flex; + white-space: nowrap; } + #documenter .docs-main header.docs-navbar .docs-right .docs-icon, #documenter .docs-main header.docs-navbar .docs-right .docs-label, #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + display: inline-block; } + #documenter .docs-main header.docs-navbar .docs-right .docs-label { + padding: 0; + margin-left: 0.3em; } + #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button { + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button { + font-size: 1.5rem; + margin: auto 0 auto 1rem; } + #documenter .docs-main header.docs-navbar > * { + margin: auto 0; } + @media screen and (max-width: 1055px) { + #documenter .docs-main header.docs-navbar { + position: sticky; + top: 0; + padding: 0 1rem; + /* For Headroom.js */ + transition-property: top, box-shadow; + -webkit-transition-property: top, box-shadow; + /* Safari */ + transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--not-top { + box-shadow: 0.2rem 0rem 0.4rem #bbb; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } + #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom { + top: -4.5rem; + transition-duration: 0.7s; + -webkit-transition-duration: 0.7s; + /* Safari */ } } + +#documenter .docs-main section.footnotes { + border-top: 1px solid #dbdbdb; } + #documenter .docs-main section.footnotes li .tag:first-child, #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, #documenter .docs-main section.footnotes li .content kbd:first-child, .content #documenter .docs-main section.footnotes li kbd:first-child { + margin-right: 1em; + margin-bottom: 0.4em; } + +#documenter .docs-main .docs-footer { + display: flex; + flex-wrap: wrap; + margin-left: 0; + margin-right: 0; + border-top: 1px solid #dbdbdb; + padding-top: 1rem; + padding-bottom: 1rem; } + @media screen and (max-width: 1055px) { + #documenter .docs-main .docs-footer { + padding-left: 1rem; + padding-right: 1rem; } } + #documenter .docs-main .docs-footer .docs-footer-nextpage, #documenter .docs-main .docs-footer .docs-footer-prevpage { + flex-grow: 1; } + #documenter .docs-main .docs-footer .docs-footer-nextpage { + text-align: right; } + #documenter .docs-main .docs-footer .flexbox-break { + flex-basis: 100%; + height: 0; } + #documenter .docs-main .docs-footer .footer-message { + font-size: 0.8em; + margin: 0.5em auto 0 auto; + text-align: center; } + +#documenter .docs-sidebar { + display: flex; + flex-direction: column; + color: #0a0a0a; + background-color: whitesmoke; + border-right: 1px solid #dbdbdb; + padding: 0; + flex: 0 0 18rem; + z-index: 5; + font-size: 1rem; + position: fixed; + left: -18rem; + width: 18rem; + height: 100%; + transition: left 0.3s; + /* Setting up a nicer theme style for the scrollbar */ } + #documenter .docs-sidebar.visible { + left: 0; + box-shadow: 0.4rem 0rem 0.8rem #bbb; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar.visible { + box-shadow: none; } } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar { + left: 0; + top: 0; } } + #documenter .docs-sidebar .docs-logo { + margin-top: 1rem; + padding: 0 1rem; } + #documenter .docs-sidebar .docs-logo > img { + max-height: 6rem; + margin: auto; } + #documenter .docs-sidebar .docs-package-name { + flex-shrink: 0; + font-size: 1.5rem; + font-weight: 700; + text-align: center; + white-space: nowrap; + overflow: hidden; + padding: 0.5rem 0; } + #documenter .docs-sidebar .docs-package-name .docs-autofit { + max-width: 16.2rem; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* Managing collapsible submenus */ } + #documenter .docs-sidebar ul.docs-menu > li > .tocitem { + font-weight: bold; } + #documenter .docs-sidebar ul.docs-menu > li li { + font-size: 0.95rem; + margin-left: 1em; + border-left: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu input.collapse-toggle { + display: none; } + #documenter .docs-sidebar ul.docs-menu ul.collapsed { + display: none; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed { + display: block; } + #documenter .docs-sidebar ul.docs-menu label.tocitem { + display: flex; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label { + flex-grow: 2; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + font-size: 0.75rem; + margin-left: 1rem; + margin-top: auto; + margin-bottom: auto; } + #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: "\f054"; } + #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before { + content: "\f078"; } + #documenter .docs-sidebar ul.docs-menu .tocitem { + display: block; + padding: 0.5rem 0.5rem; } + #documenter .docs-sidebar ul.docs-menu .tocitem, #documenter .docs-sidebar ul.docs-menu .tocitem:hover { + color: #0a0a0a; + background: whitesmoke; } + #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, #documenter .docs-sidebar ul.docs-menu label.tocitem:hover { + color: #0a0a0a; + background-color: #ebebeb; } + #documenter .docs-sidebar ul.docs-menu li.is-active { + border-top: 1px solid #dbdbdb; + border-bottom: 1px solid #dbdbdb; + background-color: white; } + #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover { + background-color: white; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover { + background-color: #ebebeb; + color: #0a0a0a; } + #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child { + border-top: none; } + #documenter .docs-sidebar ul.docs-menu ul.internal { + margin: 0 0.5rem 0.5rem; + border-top: 1px solid #dbdbdb; } + #documenter .docs-sidebar ul.docs-menu ul.internal li { + font-size: 0.85rem; + border-left: none; + margin-left: 0; + margin-top: 0.5rem; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem { + width: 100%; + padding: 0; } + #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before { + content: "⚬"; + margin-right: 0.4em; } + #documenter .docs-sidebar form.docs-search { + margin: auto; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + #documenter .docs-sidebar form.docs-search > input { + width: 14.4rem; } + @media screen and (min-width: 1056px) { + #documenter .docs-sidebar ul.docs-menu { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + @media screen and (max-width: 1055px) { + #documenter .docs-sidebar { + overflow-y: auto; + -webkit-overflow-scroll: touch; } + #documenter .docs-sidebar::-webkit-scrollbar { + width: .3rem; + background: none; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb { + border-radius: 5px 0px 0px 5px; + background: #e0e0e0; } + #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover { + background: #cccccc; } } + +#documenter .docs-main #documenter-search-info { + margin-bottom: 1rem; } + +#documenter .docs-main #documenter-search-results { + list-style-type: circle; + list-style-position: outside; } + #documenter .docs-main #documenter-search-results li { + margin-left: 2rem; } + #documenter .docs-main #documenter-search-results .docs-highlight { + background-color: yellow; } + +/* + +Original highlight.js style (c) Ivan Sagalaev + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #F0F0F0; } + +/* Base color: saturation 0; */ +.hljs, +.hljs-subst { + color: #444; } + +.hljs-comment { + color: #888888; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* User color: hue: 0 */ +.hljs-type, +.hljs-string, +.hljs-number, +.hljs-selector-id, +.hljs-selector-class, +.hljs-quote, +.hljs-template-tag, +.hljs-deletion { + color: #880000; } + +.hljs-title, +.hljs-section { + color: #880000; + font-weight: bold; } + +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-template-variable, +.hljs-link, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #BC6060; } + +/* Language color: hue: 90; */ +.hljs-literal { + color: #78A960; } + +.hljs-built_in, +.hljs-bullet, +.hljs-code, +.hljs-addition { + color: #397300; } + +/* Meta color: hue: 200 */ +.hljs-meta { + color: #1f7199; } + +.hljs-meta-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/previews/PR441/assets/themeswap.js b/previews/PR441/assets/themeswap.js new file mode 100644 index 00000000..c58e993e --- /dev/null +++ b/previews/PR441/assets/themeswap.js @@ -0,0 +1,66 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Intialize 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 browser supports user color preference + var darkPreference = false; + // Check if the users preference is for dark color scheme + if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) { + darkPreference = 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 darkTheme = 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. + var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); + // Check if the theme is primary dark theme + var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null); + // If ss is for dark theme then set the value of darkTheme to the name of the theme + if(isDarkTheme) darkTheme = 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); + } + if(active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + theme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + else if(darkTheme !== null && darkPreference === true) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + darkTheme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) { + ss.disabled = true; + } + }); + } +} +set_theme_from_local_storage(); diff --git a/previews/PR441/considerations/index.html b/previews/PR441/considerations/index.html new file mode 100644 index 00000000..f10c20f3 --- /dev/null +++ b/previews/PR441/considerations/index.html @@ -0,0 +1,20 @@ + +Design Considerations · ArchGDAL.jl

    Design Considerations

    Code Defensiveness

    Although GDAL provides a unified data model for different data formats, there are still significant differences between their implementations such that each driver is effectively its own application. This has the following implications:

    • Not all configuration options works for all drivers.
    • Not all capabilities are available for all drivers.
    • Performance characteristics may vary significantly depending on the driver.

    ArchGDAL.jl provides mechanisms for setting GDAL's configuration options, and does not maintain its own list of sanctioned options for each driver. Although work is underway to make this an easier experience for the user, it remains the responsibility of the user to check that a particular configuration exists and works for their choice of drivers.

    Here's a collection of references for developers who are interested:

    GDAL Enum Values

    GDAL.jl uses CEnum.jl, which is a C-compatible enum, this is the default in Clang.jl. This is useful when the underlying values are of interest, for example the following snippets from src/types.jl:

    import Base.|
    +
    +for T in (GDALOpenFlag, FieldValidation)
    +    eval(quote
    +        |(x::$T, y::UInt8) = UInt8(x) | y
    +        |(x::UInt8, y::$T) = x | UInt8(y)
    +        |(x::$T, y::$T) = UInt8(x) | UInt8(y)
    +    end)
    +end

    and

    function basetype(gt::OGRwkbGeometryType)::OGRwkbGeometryType
    +    wkbGeomType = convert(GDAL.OGRwkbGeometryType, gt)
    +    wkbGeomType &= (~0x80000000) # Remove 2.5D flag.
    +    wkbGeomType %= 1000 # Normalize Z, M, and ZM types.
    +    return GDAL.OGRwkbGeometryType(wkbGeomType)
    +end

    However, the use of CEnum.jl allows for multiple enums to have the same underlying value, resulting in unintuitive behavior if they are used as keys in a dictionary. For example, in the following code:

    julia> Dict(GDAL.GCI_YCbCr_CrBand => "a", GDAL.GCI_Max => "b")
    +Dict{GDAL.GDALColorInterp, String} with 1 entry:
    +  GCI_YCbCr_CrBand => "b"

    the entry for GDAL.GCI_YCbCr_CrBand => "a" got overwritten by GDAL.GCI_Max => "b" because both GDAL.GCI_YCbCr_CrBand and GDAL.GCI_Max corresponded to the same value.

    To avoid such forms of behavior, this package uses Base.Enums instead, so the above example would result in the following behavior:

    julia> Dict(ArchGDAL.GCI_YCbCr_CrBand => "a", ArchGDAL.GCI_Max => "b")
    +Dict{ArchGDAL.GDALColorInterp, String} with 2 entries:
    +  GCI_YCbCr_CrBand => "a"
    +  GCI_Max          => "b"

    To maintain parity with GDAL behavior, ArchGDAL.jl provides conversion methods to map from the enums in ArchGDAL to the corresponding cenums from GDAL.jl when calling the corresponding GDAL functions.

    Colors

    Rather than encouraging operations on colortables (with very limited functionality from GDAL), users are better served by arrays of ColorTypes using Colors.jl, for example

    range(startcolor, stop=endcolor, length=15)

    instead of

    createcolorramp!(colortable, startindex, startcolor, startindex+15, endcolor)

    Images

    To differentiate 2d arrays of colors from 3d arrays with band as the third dimension:

    • For 2D arrays (a single rasterband), if they have a color interpretation, we use the color interpretation. If they don't have a color interpretation, ArchGDAL.jl defaults to "Grey".
    • For >2D arrays (multiple rasterbands), if they have a palette interpretation (or combination of color interpretations) that resolves to a valid colortype, ArchGDAL.jl uses the palette interpretation. If they don't have a palette interpretation, we throw an error.

    In general, read() will return Array{UInt8}, and imread() will return Array{<:Colorant}.

    Tables.jl Interface

    The interface is implemented in src/tables.jl, and is only for feature and geometries in OGR (and not for images and rasters). The current API from GDAL makes it row-based in the conventions of Tables.jl. Therefore,

    • ArchGDAL.Feature meets the criteria for an AbstractRow based on https://github.com/yeesian/ArchGDAL.jl/blob/a665f3407930b8221269f8949c246db022c3a85c/src/tables.jl#L31-L58.
    • ArchGDAL.FeatureLayer meets the criteria for an AbstractRow-iterator based on the previous bullet and meeting the criteria for Iteration in base/iterators.jl.
    • ArchGDAL.AbstractDataset might contain multiple layers, and might correspond to multiple tables. The way to construct tables would be to get the layers before forming the corresponding tables.

    Missing and Null Semantics in GDAL

    When reading the fields of a feature using getfield(feature, i), ArchGDAL observes the following behavior:

    Fieldnullnotnull
    setmissingvalue
    unsetN/Anothing

    This reflects that

    • a field that is notnull will never return missing: use isfieldnull(feature, i) to determine if a field has been set.
    • a field is set will never return nothing (and a field that unset will always return nothing): use isfieldset(feature, i) to determine if a field has been set.
    • a field that is set and not null will always have a concrete value: use isfieldsetandnotnull(feature, i) to test for it.

    When writing the fields of a feature using setfield!(feature, i, value), ArchGDAL observes the following behavior:

    Fieldnullablenotnullable
    nothingunsetunset
    missingnullgetdefault()
    valuevaluevalue

    This reflects that

    • writing nothing will cause the field to be unset.
    • writing missing will cause the field to be null. In the cause of a notnullable field, it will take the default value (see https://gdal.org/development/rfc/rfc53ogrnotnull_default.html for details). If there is no default value, getdefault() will return nothing, causing the field to be unset.
    • writing a value will behave in the usual manner.

    For additional references, see

    diff --git a/previews/PR441/datasets/index.html b/previews/PR441/datasets/index.html new file mode 100644 index 00000000..fc633698 --- /dev/null +++ b/previews/PR441/datasets/index.html @@ -0,0 +1,35 @@ + +GDAL Datasets · ArchGDAL.jl

    Data Model

    GDAL Datasets

    The following code demonstrates the general workflow for reading in a dataset:

    ArchGDAL.read(filename) do dataset
    +    # work with dataset
    +end

    We defer the discussion on ArchGDAL.read(filename) to the section on Working with Files.

    Vector Datasets

    In this section, we work with the data/point.geojson dataset:

    dataset = ArchGDAL.read("data/point.geojson")
    GDAL Dataset (Driver: GeoJSON/GeoJSON)
    +File(s): 
    +
    +Number of feature layers: 1
    +  Layer 0: point (wkbPoint)
    +

    The display indicates

    • the type of the object (GDAL Dataset)
    • the driver used to open it (shortname/longname: GeoJSON/GeoJSON)
    • the files that it corresponds to (data/point.geojson)
    • the number of layers in the dataset (1), and a brief summary of each.

    You can also programmatically retrieve them using

    For more on working with features and vector data, see the Section on Feature Data.

    Raster Datasets

    In this section, we work with the gdalworkshop/world.tif dataset:

    dataset = ArchGDAL.read("gdalworkshop/world.tif")
    GDAL Dataset (Driver: GTiff/GeoTIFF)
    +File(s): 
    +
    +Dataset (width x height): 2048 x 1024 (pixels)
    +Number of raster bands: 3
    +  [GA_ReadOnly] Band 1 (Red): 2048 x 1024 (UInt8)
    +  [GA_ReadOnly] Band 2 (Green): 2048 x 1024 (UInt8)
    +  [GA_ReadOnly] Band 3 (Blue): 2048 x 1024 (UInt8)
    +

    The display indicates

    • the type of the object (GDAL Dataset)
    • the driver used to open it (shortname/longname: GTiff/GeoTIFF)
    • the files that it corresponds to (gdalworkshop/world.tif)
    • the number of raster bands in the dataset (3), and a brief summary of each.

    You can also programmatically retrieve them using

    For more on working with raster data, see the Section on Raster Data.

    Working with Files

    We provide the following methods for working with files:

    • ArchGDAL.copy: creates a copy of a dataset. This is often used with a virtual source dataset allowing configuration of band types, and other information without actually duplicating raster data.
    • ArchGDAL.create: creates a new dataset.
    • ArchGDAL.read: opens a dataset in read-only mode.
    • ArchGDAL.update: opens a dataset with the possibility of updating it. If you open a dataset object with update access, it is not recommended to open a new dataset on the same underlying file.

    In GDAL, datasets are closed by calling GDAL.close(). This will result in proper cleanup, and flushing of any pending writes. Forgetting to call GDAL.close() on a dataset opened in update mode in a popular format like GTiff will likely result in being unable to open it afterwards.

    In ArchGDAL, the closing of datasets is handled by the API and not by the user. ArchGDAL provides two methods for working with datasets.

    The first is to use a do-block:

    ArchGDAL.<copy/create/read/update>(...) do dataset
    +    # work with dataset
    +end

    The second is to call the method directly:

    dataset = ArchGDAL.<copy/create/read/update>(...)
    +# work with dataset
    Note

    This pattern of using do-blocks to manage context plays a big way into the way we handle memory in this package. For details, see the section on Memory Management.

    The ArchGDAL.read method accepts keyword arguments(kwargs) viz. the GDAL open-options for reading .csv spatial datasets.

    Example: In a CSV the data is stored as String.

    dataset1 = ArchGDAL.read("data/multi_geom.csv")
    +layer1 = ArchGDAL.getlayer(dataset1, 0)
    Layer: multi_geom
    +     Field 0 (id): [OFTString], 5.1, 5.2
    +     Field 1 (point): [OFTString], POINT (30 10), POINT (35 15)
    +     Field 2 (zoom): [OFTString], 1.0, 2.0
    +     Field 3 (linestring): [OFTString], LINESTRING (30 10, 1..., ...
    +     Field 4 (location): [OFTString], Mumbai, New Delhi
    +

    Well this is weird, the CSV driver recognises our point and linestring geometries as String. Now if you have a .csvt file of the same name with the geometry types as WKT, they types will be recognized, else, GDAL offers open-options to tweak the read parameters that are passed as kwargs.

    So for the above CSV, we want the driver to detect our geometries, so according to open-options we should use the "GEOM_POSSIBLE_NAMES=point,linestring" option. Also we want that the geometry columns should not be kept as regular String columns, so we add a "KEEP_GEOM_COLUMNS=NO" option too.

    dataset2 = ArchGDAL.read("data/multi_geom.csv", options = ["GEOM_POSSIBLE_NAMES=point,linestring", "KEEP_GEOM_COLUMNS=NO"])
    +
    +layer2 = ArchGDAL.getlayer(dataset2, 0)
    Layer: multi_geom
    +  Geometry 0 (point): [wkbUnknown]
    +  Geometry 1 (linestring): [wkbUnknown]
    +     Field 0 (id): [OFTString], 5.1, 5.2
    +     Field 1 (zoom): [OFTString], 1.0, 2.0
    +     Field 2 (location): [OFTString], Mumbai, New Delhi
    +
    diff --git a/previews/PR441/features/index.html b/previews/PR441/features/index.html new file mode 100644 index 00000000..bcf2d4c4 --- /dev/null +++ b/previews/PR441/features/index.html @@ -0,0 +1,16 @@ + +Feature Data · ArchGDAL.jl

    Feature Data

    In this section, we revisit the data/point.geojson dataset.

    dataset = ArchGDAL.read("data/point.geojson")
    GDAL Dataset (Driver: GeoJSON/GeoJSON)
    +File(s): 
    +
    +Number of feature layers: 1
    +  Layer 0: point (wkbPoint)
    +

    Feature Layers

    Retrieve a layer from a dataset using ArchGDAL.getlayer

    layer = ArchGDAL.getlayer(dataset, 0)
    Layer: point
    +  Geometry 0 (): [wkbPoint], POINT (100 0), POINT (100.2785 0.0893), ...
    +     Field 0 (FID): [OFTReal], 2.0, 3.0, 0.0, 3.0
    +     Field 1 (pointname): [OFTString], point-a, point-b, a, b
    +

    The display provides

    • the name of the feature layer (point)
    • the geometries in the dataset, and their brief summary.
    • the fields in the dataset, and their brief summary.

    You can also programmatically retrieve them using

    Field Definitions

    Each fielddefn defines an attribute of a feature, and supports the following:

    Each geomdefn defines an attribute of a geometry, and supports the following:

    Individual Features

    We can examine an individual feature

    ArchGDAL.getfeature(layer, 2) do feature
    +    print(feature)
    +end
    Feature
    +  (index 0) geom => POINT
    +  (index 0) FID => 0.0
    +  (index 1) pointname => a

    You can programmatically retrieve the information using

    More information on geometries can be found in Geometric Operations.

    diff --git a/previews/PR441/geometries/index.html b/previews/PR441/geometries/index.html new file mode 100644 index 00000000..66b14c29 --- /dev/null +++ b/previews/PR441/geometries/index.html @@ -0,0 +1,44 @@ + +Geometric Operations · ArchGDAL.jl

    Geometric Operations

    In this section, we consider some of the common kinds of geometries that arises in applications. These include Point, LineString, Polygon, GeometryCollection, MultiPolygon, MultiPoint, and MultiLineString.

    Geometry Creation

    To create geometries of different types,

    point = ArchGDAL.createpoint(1.0, 2.0)
    +linestring = ArchGDAL.createlinestring([(i,i+1) for i in 1.0:3.0])
    +linearring = ArchGDAL.createlinearring([(0.,0.), (0.,1.), (1.,1.)])
    +simplepolygon = ArchGDAL.createpolygon([(0.,0.), (0.,1.), (1.,1.)])
    +complexpolygon = ArchGDAL.createpolygon([[(0.,0.), (0.,j), (j,j)] for j in 1.0:-0.1:0.9])
    +multipoint = ArchGDAL.createlinearring([(0.,0.), (0.,1.), (1.,1.)])
    +multilinestring = ArchGDAL.createmultilinestring([[(i,i+1) for i in j:j+3] for j in 1.0:5.0:6.0])
    +multipolygon = ArchGDAL.createmultipolygon([[[(0.,0.), (0.,j), (j,j)]] for j in 1.0:-0.1:0.9])
    Geometry: MULTIPOLYGON (((0 0,0 1,1 1)),((0 0,0.0 0.9,0.9 0.9)))

    Alternatively, they can be assembled from their components.

    point = ArchGDAL.createpoint()
    +ArchGDAL.addpoint!(point, 1.0, 2.0)
    +
    +linestring = ArchGDAL.createlinestring()
    +for i in 1.0:3.0
    +    ArchGDAL.addpoint!(linestring, i, i+1)
    +end
    +
    +linearring = ArchGDAL.createlinearring()
    +for i in 1.0:3.0
    +    ArchGDAL.addpoint!(linearring, i, i+1)
    +end
    +
    +polygon = ArchGDAL.createpolygon()
    +for j in 1.0:-0.1:0.9
    +    ring = ArchGDAL.createlinearring([(0.,0.), (0.,j), (j,j)])
    +    ArchGDAL.addgeom!(polygon, ring)
    +end
    +
    +multipoint = ArchGDAL.createmultipoint()
    +for i in 1.0:3.0
    +    pt = ArchGDAL.createpoint(i, i+1)
    +    ArchGDAL.addgeom!(multipoint, pt)
    +end
    +
    +multilinestring = ArchGDAL.createmultilinestring()
    +for j in 1.0:5.0:6.0
    +    line = ArchGDAL.createlinestring([(i,i+1) for i in j:j+3])
    +    ArchGDAL.addgeom!(multilinestring, line)
    +end
    +
    +multipolygon = ArchGDAL.createmultipolygon()
    +for j in 1.0:-0.1:0.9
    +    poly = ArchGDAL.createpolygon([(0.,0.), (0.,j), (j,j)])
    +    ArchGDAL.addgeom!(multipolygon, poly)
    +end

    They can also be constructed from other data formats such as:

    Geometry Modification

    The following methods are commonly used for retrieving elements of a geometry.

    The following methods are commonly used for modifying or adding to a geometry.

    Unary Operations

    The following is an non-exhaustive list of unary operations available for geometries.

    Attributes

    Predicates

    The following predicates return a Bool.

    Immutable Operations

    The following methods do not modify geom.

    Mutable Operations

    The following methods modifies the first argument geom.

    Export Formats

    Binary Operations

    The following is an non-exhaustive list of binary operations available for geometries.

    Predicates

    The following predicates return a Bool.

    Prepared geometry

    When repeatedly calling ArchGDAL.intersects(g1, g2) and ArchGDAL.contains(g1, g2) on the same geometry, for example, when intersecting 50 points with a 100 polygons, it is possible to increase performance by caching required–otherwise repeatedly calculated–information on geometries. You can do this by preparing a geometry by calling ArchGDAL.preparegeom(geom) and using the resulting prepared geometry as the first argument for ArchGDAL.intersects(g1, g2) or ArchGDAL.contains(g1, g2).

    If you use a custom GDAL installation, you can check whether it supports prepared geometries by calling ArchGDAL.has_preparedgeom_support().

    Immutable Operations

    The following methods do not mutate the input geomteries g1 and g2.

    Mutable Operations

    The following method modifies the first argument g1.

    diff --git a/previews/PR441/images/index.html b/previews/PR441/images/index.html new file mode 100644 index 00000000..63f2c96a --- /dev/null +++ b/previews/PR441/images/index.html @@ -0,0 +1,117714 @@ + +Working with Images · ArchGDAL.jl

    Images

    In this section, we revisit the gdalworkshop/world.tif dataset.

    dataset = ArchGDAL.read("gdalworkshop/world.tif")
    GDAL Dataset (Driver: GTiff/GeoTIFF)
    +File(s): 
    +
    +Dataset (width x height): 2048 x 1024 (pixels)
    +Number of raster bands: 3
    +  [GA_ReadOnly] Band 1 (Red): 2048 x 1024 (UInt8)
    +  [GA_ReadOnly] Band 2 (Green): 2048 x 1024 (UInt8)
    +  [GA_ReadOnly] Band 3 (Blue): 2048 x 1024 (UInt8)
    +

    A description of the display is available in Raster Datasets.

    Reading from Datasets

    We can construct an image from it in the following way:

    ArchGDAL.imread(dataset)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Reading from Files

    We can read the file as an image instead:

    ArchGDAL.imread("gdalworkshop/world.tif")
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Reading from Rasterbands

    We can also read from individual raster bands:

    ArchGDAL.imread(ArchGDAL.getband(dataset, 1))
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Or equivalently,

    ArchGDAL.imread(dataset, 1)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    It will interpret the color channel (for RGB) correctly if there is one. E.g.

    ArchGDAL.imread(dataset, 2)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    and

    ArchGDAL.imread(dataset, 3)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Working with Colors

    Operations on colors behave as you think they might:

    ArchGDAL.imread(dataset, 2) + ArchGDAL.imread(dataset, 3)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    and

    0.5 * ArchGDAL.imread(dataset, 1) + ArchGDAL.imread(dataset, 3)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    See Colors.jl for more on what you can do.

    diff --git a/previews/PR441/index.html b/previews/PR441/index.html new file mode 100644 index 00000000..cdfa9e03 --- /dev/null +++ b/previews/PR441/index.html @@ -0,0 +1,2 @@ + +ArchGDAL.jl documentation · ArchGDAL.jl

    ArchGDAL.jl documentation

    GDAL is a translator library for raster and vector geospatial data formats that is released under an X/MIT license by the Open Source Geospatial Foundation. As a library, it presents an abstract data model to drivers for various raster and vector formats.

    ArchGDAL.jl aims to be a complete solution for working with GDAL in Julia, similar in scope to the SWIG bindings for Python. It builds on top of GDAL.jl, and provides a high level API for GDAL, espousing the following principles.

    Principles (The Arch Way)

    (adapted from https://wiki.archlinux.org/index.php/Arch_Linux#Principles)

    • simplicity: without unnecessary additions or modifications. It preserves the GDAL Data Model and requires minimal dependencies.
    • modernity: ArchGDAL strives to maintain the latest stable release versions of GDAL as long as systemic package breakage can be reasonably avoided.
    • pragmatism: The principles here are only useful guidelines. Ultimately, design decisions are made on a case-by-case basis through developer consensus. Evidence-based technical analysis and debate are what matter, not politics or popular opinion.
    • user-centrality: Whereas other libraries attempt to be more user-friendly, ArchGDAL shall be user-centric. It is intended to fill the needs of those contributing to it, rather than trying to appeal to as many users as possible.
    • versatility: ArchGDAL will strive to remain small in its assumptions about the range of user-needs, and to make it easy for users to build their own extensions/conveniences.

    Installation

    To install this package, run the following command in the Pkg REPL-mode,

    pkg> add ArchGDAL

    To test if it is installed correctly,

    pkg> test ArchGDAL

    To load the package,

    julia> using ArchGDAL

    In the documentation AG is often used as a shorthand for ArchGDAL. To use this shorthand you can use:

    import ArchGDAL as AG

    Contents

    diff --git a/previews/PR441/memory/index.html b/previews/PR441/memory/index.html new file mode 100644 index 00000000..f32168b9 --- /dev/null +++ b/previews/PR441/memory/index.html @@ -0,0 +1,47 @@ + +Interactive versus Scoped Objects · ArchGDAL.jl

    Interactive versus Scoped Objects

    ArchGDAL provides two approaches for working with GDAL objects.

    The first approach is through Scoped Objects, which uses do-blocks as context managers. The problem with using do-blocks to manage context is that they are difficult to work with in an interactive way:

    ArchGDAL.read(filename) do dataset
    +    # dataset exists within this scope
    +end
    +# we do not have access to dataset from here on

    In the example above, we do not get to see information about dataset unless we write code to display information within the scope of the do-block. This makes it difficult to work with it in an exploratory "depth-first" manner.

    The second approach is through Interactive Objects, which are designed for use at the REPL.

    dataset = ArchGDAL.read(filename)
    +# work with dataset

    A potential drawback of the second approach is that the objects are managed by Julia's garbage collector. This requires ArchGDAL to keep track of objects that interactive objects have a relationship with so that the interactive objects are not prematurely destroyed. For safety, ArchGDAL might make clones/copies of the underlying data, and only allow a subset of GDAL's objects to be created in this way.

    Memory Management (Advanced)

    Unlike the design of fiona, ArchGDAL does not immediately make copies from data sources. This introduces concerns about memory management (whether objects should be managed by Julia's garbage collector, or by other means of destroying GDAL object when they are out of scope).

    Scoped Objects

    For scoped objects, they are often created within the context of a do-block. As an example, the following code block

    ArchGDAL.getband(dataset, i) do rasterband
    +    # do something with rasterband
    +end

    corresponds to the following sequence of function calls:

    rasterband = ArchGDAL.unsafe_getband(dataset, i)
    +try
    +    # do something with rasterband
    +finally
    +    ArchGDAL.destroy(rasterband)
    +end

    under the hood (see src/context.jl). Therefore, the objects themselves do not have a finalizer registered:

    mutable struct RasterBand <: AbstractRasterBand
    +    ptr::GDAL.GDALRasterBandH
    +end
    +
    +unsafe_getband(dataset::AbstractDataset, i::Integer) =
    +    RasterBand(GDAL.getrasterband(dataset, i))
    +
    +function destroy(rb::AbstractRasterBand)
    +    rb.ptr = C_NULL
    +end
    Note

    We use the unsafe_ prefix to indicate those methods that return scoped objects. These methods should not be used by users directly.

    Interactive Objects

    By contrast, the following code

    rasterband = ArchGDAL.getband(dataset, i)
    +# do something with rasterband

    returns an interactive rasterband that has destroy() registered with its finalizer.

    mutable struct IRasterBand <: AbstractRasterBand
    +    ptr::GDAL.GDALRasterBandH
    +    ownedby::AbstractDataset
    +
    +    function IRasterBand(
    +            ptr::GDAL.GDALRasterBandH = C_NULL;
    +            ownedby::AbstractDataset = Dataset()
    +        )
    +        rasterband = new(ptr, ownedby)
    +        finalizer(destroy, rasterband)
    +        return rasterband
    +    end
    +end
    +
    +getband(dataset::AbstractDataset, i::Integer) =
    +    IRasterBand(GDAL.getrasterband(dataset, i), ownedby = dataset)
    +
    +function destroy(rasterband::IRasterBand)
    +    rasterband.ptr = C_NULL
    +    rasterband.ownedby = Dataset()
    +    return rasterband
    +end

    The I in IRasterBand indicates that it is an [i]nteractive type. Other interactive types include IDataset, IFeatureLayer, ISpatialRef and IGeometry.

    ArchGDAL requires all interactive types to have a finalizer that calls destroy() on them. All objects that have a relationship with an interactive object are required to hold a reference to the interactive object. For example, objects of type IRasterBand might have a relationship with an IDataset, therefore they have an ownedby attribute which might refer to such a dataset.

    Views

    Sometimes, it is helpful to work with objects that are "internal references" that have restrictions on the types of methods that they support. As an example layerdefn(featurelayer) returns a feature definition that is internal to the feature layer, and does not support methods such as write!(featuredefn, fielddefn) and deletegeomdefn!(featuredefn, i). To indicate that they might have restrictions, some types have View as a postfix. Such types include IFeatureDefnView, IFieldDefnView, and IGeomFieldDefnView.

    Summary

    To summarize,

    • ArchGDAL.unsafe_<method>(args...) will return a scoped object. The proper way of using them is within the setting of a do-block:
    ArchGDAL.<method>(args...) do result
    +    # result is a scoped object
    +end
    • ArchGDAL.<method>(args...) will return an interactive object.
    result = ArchGDAL.<method>(args...)
    +# result is an interactive object
    Note

    Users are allowed to mix both "interactive" and "scoped" objects. As long as they do not manually call ArchGDAL.destroy() on any object, ArchGDAL is designed to avoid the pitfalls of GDAL memory management (e.g. in Python Gotchas).

    References

    Here's a collection of references for developers who are interested.

    diff --git a/previews/PR441/projections/index.html b/previews/PR441/projections/index.html new file mode 100644 index 00000000..808a8742 --- /dev/null +++ b/previews/PR441/projections/index.html @@ -0,0 +1,787 @@ + +Spatial Projections · ArchGDAL.jl

    Spatial Projections

    (This is based entirely on the GDAL/OSR Tutorial and Python GDAL/OGR Cookbook.)

    The ArchGDAL.SpatialRef, and ArchGDAL.CoordTransform types are lightweight wrappers around GDAL objects that represent coordinate systems (projections and datums) and provide services to transform between them. These services are loosely modeled on the OpenGIS Coordinate Transformations specification, and use the same Well Known Text format for describing coordinate systems.

    Coordinate Systems

    There are two primary kinds of coordinate systems. The first is geographic (positions are measured in long/lat) and the second is projected (such as UTM - positions are measured in meters or feet).

    • Geographic Coordinate Systems: A Geographic coordinate system contains information on the datum (which implies an spheroid described by a semi-major axis, and inverse flattening), prime meridian (normally Greenwich), and an angular units type which is normally degrees.

    • Projected Coordinate Systems: A projected coordinate system (such as UTM, Lambert Conformal Conic, etc) requires and underlying geographic coordinate system as well as a definition for the projection transform used to translate between linear positions (in meters or feet) and angular long/lat positions.

    Creating Spatial References

    spatialref = ArchGDAL.importEPSG(2927)
    Spatial Reference System: +proj=lcc +lat_0=45.3333333333333 + ... _defs
    ArchGDAL.toPROJ4(spatialref)
    "+proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"

    The details of how to interpret the results can be found in http://proj4.org/usage/projections.html.

    In the above example, we constructed a SpatialRef object from the EPSG Code 2927. There are a variety of other formats from which SpatialRefs can be constructed, such as

    We currently support a few export formats too:

    Reprojecting a Geometry

    source = ArchGDAL.importEPSG(2927)
    Spatial Reference System: +proj=lcc +lat_0=45.3333333333333 + ... _defs
    target = ArchGDAL.importEPSG(4326)
    Spatial Reference System: +proj=longlat +datum=WGS84 +no_defs
    ArchGDAL.createcoordtrans(source, target) do transform
    +    point = ArchGDAL.fromWKT("POINT (1120351.57 741921.42)")
    +    println("Before: $(ArchGDAL.toWKT(point))")
    +    ArchGDAL.transform!(point, transform)
    +    println("After: $(ArchGDAL.toWKT(point))")
    +end
    Before: POINT (1120351.57 741921.42)
    +After: POINT (47.3488070138318 -122.598149943144)
    using DataFrames
    +import GeoFormatTypes as GFT
    +
    +coords = zip(rand(10), rand(10))
    +df = DataFrame(geom=ArchGDAL.createpoint.(coords), name="test");
    +df.geom = ArchGDAL.reproject(df.geom, GFT.EPSG(4326), GFT.EPSG(28992))
    10-element Vector{ArchGDAL.IGeometry{ArchGDAL.wkbPoint}}:
    + Geometry: POINT (-449241.394261463 -5687273.8403567)
    + Geometry: POINT (-485708.675413882 -5737059.78957766)
    + Geometry: POINT (-514297.644567467 -5625581.41550992)
    + Geometry: POINT (-551321.624387219 -5667553.42584718)
    + Geometry: POINT (-525644.692416974 -5723940.91090942)
    + Geometry: POINT (-551860.25606085 -5599273.51788913)
    + Geometry: POINT (-467589.691555743 -5604105.55601598)
    + Geometry: POINT (-448371.148102802 -5682825.77356665)
    + Geometry: POINT (-528335.053282961 -5731004.42371987)
    + Geometry: POINT (-492089.145486598 -5731132.36996295)

    Reprojecting from a layer

    # Plotting with native GEOJSON geographic CRS
    +p_WGS_84 = AG.getfeature(layer, 0) do feature
    +    AG.getgeom(feature, 0) do geom
    +        plot(geom; fa=0.1, title="WGS 84")
    +    end
    +end
    +
    +# Plotting with local projected CRS
    +p_Lambert_93 = AG.getfeature(layer, 0) do feature
    +    AG.getgeom(feature, 0) do geom
    +        source = AG.getspatialref(geom)
    +        target = AG.importEPSG(2154)
    +        AG.createcoordtrans(source, target) do transform
    +            plot(AG.transform!(geom, transform); fa=0.1, title="Lambert 93")
    +        end
    +    end
    +end
    +
    +plot(p_WGS_84, p_Lambert_93; size=(600, 200), layout=(1,2))
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    References

    Some background on OpenGIS coordinate systems and services can be found in the Simple Features for COM, and Spatial Reference Systems Abstract Model documents available from the Open Geospatial Consortium. The GeoTIFF Projections Transform List may also be of assistance in understanding formulations of projections in WKT. The EPSG Geodesy web page is also a useful resource. You may also consult the OGC WKT Coordinate System Issues page.

    diff --git a/previews/PR441/quickstart/index.html b/previews/PR441/quickstart/index.html new file mode 100644 index 00000000..6d96115e --- /dev/null +++ b/previews/PR441/quickstart/index.html @@ -0,0 +1,89 @@ + +ArchGDAL Quickstart Guide · ArchGDAL.jl

    ArchGDAL quickstart

    This tutorial is highly inspired by the Python Quickstart, and aims to provide a similar introductory guide to the ArchGDAL package.

    This guide uses a GeoTIFF image of the band 4 of a Landsat 8 image, covering a part of the United State's Colorado Plateau. This image was acquired on July 12, 2016, and can be download at this link. example.tif

    Opening the dataset

    Assuming that the ArchGDAL package is already installed, first import the package, and preferably assign an alias to the package.

    In this example, we'll be fetching the raster dataset from where it is hosted.

    julia> dataset = AG.readraster("/vsicurl/http://landsat-pds.s3.amazonaws.com/c1/L8/037/034/LC08_L1TP_037034_20160712_20170221_01_T1/LC08_L1TP_037034_20160712_20170221_01_T1_B4.TIF")
    +ERROR: GDALError (CE_Failure, code 11):
    +	HTTP response code: 403

    A dataset can be opened using ArchGDAL's readraster(...) method. This method takes in the path of a dataset as a string, and returns a GDAL Dataset object in read-only mode.

    ArchGDAL can read a variety of file types using appropriate drivers. The driver used for opening the dataset can be queried as such.

    julia> AG.getdriver(dataset)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    Dataset Attributes

    A raster dataset can have multiple bands of information. To get the number of bands present in a dataset -

    julia> AG.nraster(dataset)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    In our case, the raster dataset only has a single band.

    Other properties of a raster dataset, such as the width and height can be accessed using the following functions

    julia> AG.width(dataset)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.
    +
    +julia> AG.height(dataset)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    Dataset Georeferencing

    All raster datasets contain embedded georeferencing information, using which the raster image can be located at a geographic location. The georeferencing attributes are stored as the dataset's Geospatial Transform.

    julia> gt = AG.getgeotransform(dataset)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    The x-y coordinates of the top-left corner of the raster dataset are denoted by gt[1] and gt[4] values. In this case, the coordinates . The cell size is represented by gt[2] and gt[6] values, corresponding to the cell size in x and y directions respectively, and the gt[3] and gt[5] values define the rotation. In our case, the top left pixel is at an offset of 358485.0m and 4.265115e6m in x and y directions respectively, from the origin.

    The Origin of the dataset is defined using what is called, a Coordinate Reference System (CRS in short).

    julia> p = AG.getproj(dataset)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    The getproj(...) function returns the projection of a dataset as a string representing the CRS in the OpenGIS WKT format. To convert it into other CRS representations, such as PROJ.4, toPROJ4(...) can be used. However, first the string representation of the CRS has to be converted into an ArchGDAL.ISpatialRef type using the importWKT(...) function.

    julia> AG.toPROJ4(AG.importWKT(p))
    +ERROR: UndefVarError: `p` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    Reading Raster data

    In the previous steps, we read the raster file as a dataset. To obtain the actual raster data, we can slice the array accordingly.

    julia> dataset[:, :, 1]
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    Since the dimensions of the dataset are [cols, rows, bands], respectively, using [:, :, 1] returns all the columns and rows for the first band. Accordingly other complex slice operations can also be performed.

    To get the individual band

    julia> band = AG.getband(dataset, 1)
    +ERROR: UndefVarError: `dataset` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    Band specific attributes can be easily accessed through a variety of functions

    julia> AG.width(band)
    +ERROR: UndefVarError: `band` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.
    +
    +julia> AG.height(band)
    +ERROR: UndefVarError: `band` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.
    +
    +julia> AG.getnodatavalue(band)
    +ERROR: UndefVarError: `band` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.
    +
    +julia> AG.indexof(band)
    +ERROR: UndefVarError: `band` not defined in `Main.var"ex-quickstart"`
    +Suggestion: check for spelling errors or missing imports.

    The no-data value of the band can be obtained using the getnodatavalue(...) function, which in our case is -1.0e10.

    Writing into Dataset

    Creating dummy data to be written as raster dataset.

    x = range(-4.0, 4.0, length=240)
    +y = range(-3.0, 3.0, length=180)
    +X = repeat(collect(x)', size(y)[1])
    +Y = repeat(collect(y), 1, size(x)[1])
    +Z1 = exp.(-2*log(2) .*((X.-0.5).^2 + (Y.-0.5).^2)./(1^2))
    +Z2 = exp.(-3*log(2) .*((X.+0.5).^2 + (Y.+0.5).^2)./(2.5^2))
    +Z = 10.0 .* (Z2 .- Z1)
    180×240 Matrix{Float64}:
    + 0.0212253   0.0229376   0.0247696   0.026728    …  0.00163782   0.00148217
    + 0.0224341   0.0242439   0.0261802   0.0282501      0.00173109   0.00156658
    + 0.023694    0.0256055   0.0276505   0.0298367      0.00182831   0.00165456
    + 0.0250059   0.0270233   0.0291816   0.0314888      0.00192955   0.00174618
    + 0.0263708   0.0284983   0.0307744   0.0332075      0.00203487   0.00184149
    + 0.0277894   0.0300313   0.0324298   0.0349939   …  0.00214433   0.00194055
    + 0.0292625   0.0316232   0.0341488   0.0368488      0.002258     0.00204341
    + 0.0307905   0.0332745   0.0359321   0.038773       0.00237591   0.00215012
    + 0.0323742   0.0349859   0.0377802   0.0407672      0.00249811   0.0022607
    + 0.0340139   0.0367579   0.0396937   0.042832       0.00262463   0.0023752
    + ⋮                                               ⋱               
    + 0.00525686  0.00568095  0.00613468  0.00661971     0.000405638  0.000367089
    + 0.00488943  0.00528388  0.00570589  0.00615702     0.000377286  0.000341431
    + 0.00454428  0.00491088  0.00530311  0.00572239     0.000350653  0.000317329
    + 0.00422034  0.00456081  0.00492507  0.00531446     0.000325656  0.000294708
    + 0.00391656  0.00423252  0.00457056  0.00493193  …  0.000302216  0.000273495
    + 0.00363193  0.00392493  0.00423841  0.00457351     0.000280253  0.000253619
    + 0.00336547  0.00363697  0.00392745  0.00423797     0.000259691  0.000235012
    + 0.00311622  0.00336762  0.00363659  0.00392411     0.000240459  0.000217607
    + 0.00288328  0.00311589  0.00336475  0.00363078     0.000222484  0.000201341

    The fictional field for this example consists of the difference of two Gaussian distributions and is represented by the array Z. Its contours are shown below. creating-dataset

    Once we have the data to write into a raster dataset, before performing the write operation itself, it is a good idea to define the geotransform and the coordinate reference system of the resulting dataset. For North-up raster images, only the pixel-size/resolution and the coordinates of the upper-left pixel is required.

    # Resolution
    +res = (x[end] - x[1]) /240.0
    +
    +# Upper-left pixel coordinates
    +ul_x = x[1] - res/2
    +ul_y = y[1] - res/2
    +
    +gt = [ul_x, res, 0.0, ul_y, 0.0, res]
    6-element Vector{Float64}:
    + -4.016666666666667
    +  0.03333333333333333
    +  0.0
    + -3.0166666666666666
    +  0.0
    +  0.03333333333333333

    The coordinate reference system of the dataset needs to be a string in the WKT format.

    crs = AG.toWKT(AG.importPROJ4("+proj=latlong"))
    "GEOGCS[\"unknown\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Longitude\",EAST],AXIS[\"Latitude\",NORTH]]"

    To write this array, first a dataset has to be created. This can be done using the AG.create function. The first argument defines the path of the resulting dataset. The following keyword arguments are hopefully self-explanatory.

    Once inside the do...end block, the write! method can be used to write the array(Z), in the 1st band of the opened dataset. Next, the geotransform and CRS can be specified using the setgeotransform! and setproj! methods.

    AG.create(
    +    "./temporary.tif",
    +    driver = AG.getdriver("GTiff"),
    +    width=240,
    +    height=180,
    +    nbands=1,
    +    dtype=Float64
    +) do dataset
    +    AG.write!(dataset, Z, 1)
    +
    +    AG.setgeotransform!(dataset, gt)
    +    AG.setproj!(dataset, crs)
    +end
    NULL Dataset
    diff --git a/previews/PR441/rasters/index.html b/previews/PR441/rasters/index.html new file mode 100644 index 00000000..120b7c26 --- /dev/null +++ b/previews/PR441/rasters/index.html @@ -0,0 +1,81 @@ + +Raster Data · ArchGDAL.jl

    Raster Data

    In this section, we revisit the gdalworkshop/world.tif dataset.

    dataset = AG.read("gdalworkshop/world.tif")
    GDAL Dataset (Driver: GTiff/GeoTIFF)
    +File(s): 
    +
    +Dataset (width x height): 2048 x 1024 (pixels)
    +Number of raster bands: 3
    +  [GA_ReadOnly] Band 1 (Red): 2048 x 1024 (UInt8)
    +  [GA_ReadOnly] Band 2 (Green): 2048 x 1024 (UInt8)
    +  [GA_ReadOnly] Band 3 (Blue): 2048 x 1024 (UInt8)
    +

    A description of the display is available in Raster Datasets.

    Raster Bands

    We can examine an individual raster band

    band = ArchGDAL.getband(dataset, 1)
    [GA_ReadOnly] Band 1 (Red): 2048 x 1024 (UInt8)
    +    blocksize: 256×256, nodata: nothing, units: 1.0px + 0.0
    +    overviews: (0) 1024x512 (1) 512x256 (2) 256x128 
    +               (3) 128x64 (4) 64x32 (5) 32x16 
    +               (6) 16x8 

    You can programmatically retrieve the information in the header using

    You can get additional attribute information using

    Note

    GDAL contains a concept of the natural block size of rasters so that applications can organized data access efficiently for some file formats. The natural block size is the block size that is most efficient for accessing the format. For many formats this is simple a whole scanline. However, for tiled images this will typically be the tile size.

    Finally, you can obtain overviews:

    ArchGDAL.getoverview(band, 2)
    [GA_ReadOnly] Band 1 (Red): 256 x 128 (UInt8)
    +    blocksize: 128×128, nodata: nothing, units: 1.0px + 0.0
    +    overviews: 

    Raster I/O

    Reading Raster Values

    The general operative method for reading in raster values from a dataset or band is to use ArchGDAL.read().

    • ArchGDAL.read(dataset): reads the entire dataset as a single multidimensional array.
    • ArchGDAL.read(dataset, indices): reads the raster bands at the indices (in that order) into a multidimensional array.
    • ArchGDAL.read(dataset, i): reads the i-th raster band into an array.
    • ArchGDAL.read(band): reads the raster band into an array.
    Note

    The array returned by read has (cols, rows, bands) dimensions.

    To convert to a format used by the Images.jl ecosystem, you can either create a view using PermutedDimsArray(A, (3,2,1)) or create a permuted copy using permutedims(A, (3,2,1)). The resulting arrays will have (bands, rows, cols) dimensions.

    You can also specify the subset of rows and columns (provided as UnitRanges like 2:9) to read:

    • ArchGDAL.read(dataset, indices, rows, cols)
    • ArchGDAL.read(dataset, i, rows, cols)
    • ArchGDAL.read(band, rows, cols)

    On other occasions, it might be easier to first specify a position (xoffset,yoffset) to read from, and the size (xsize, ysize) of the window to read:

    • ArchGDAL.read(dataset, indices, xoffset, yoffset, xsize, ysize)
    • ArchGDAL.read(dataset, i, xoffset, yoffset, xsize, ysize)
    • ArchGDAL.read(band, xoffset, yoffset, xsize, ysize)

    You might have an existing buffer that you wish to read the values into. In such cases, the general API for doing so is to write ArchGDAL.read!(source, buffer, args...) instead of ArchGDAL.read(source, args...).

    Writing Raster Values

    For writing values from a buffer to a raster dataset or band, the following methods are available:

    • ArchGDAL.write!(band, buffer)
    • ArchGDAL.write!(band, buffer, rows, cols)
    • ArchGDAL.write!(band, buffer, xoffset, yoffset, xsize, ysize)
    • ArchGDAL.write!(dataset, buffer, i)
    • ArchGDAL.write!(dataset, buffer, i, rows, cols)
    • ArchGDAL.write!(dataset, buffer, i, xoffset, yoffset, xsize, ysize)
    • ArchGDAL.write!(dataset, buffer, indices)
    • ArchGDAL.write!(dataset, buffer, indices, rows, cols)
    • ArchGDAL.write!(dataset, buffer, indices, xoffset, yoffset, xsize, ysize)
    Note

    ArchGDAL expects the dimensions of the buffer to be (cols, rows, bands) or (cols, rows).

    Windowed Reads and Writes

    Following the description in mapbox/rasterio's documentation, a window is a view onto a rectangular subset of a raster dataset. This is useful when you want to work on rasters that are larger than your computers RAM or process chunks of large rasters in parallel.

    For that purpose, we have a method called ArchGDAL.windows(band) which iterates over the windows of a raster band, returning the indices corresponding to the rasterblocks within that raster band for efficiency:

    using Base.Iterators: take  # to prevent showing all blocks
    +windows = ArchGDAL.windows(band)
    +
    +for (cols, rows) in take(windows, 5)
    +    @info "Window" cols rows
    +end
    ┌ Info: Window
    +│   cols = 1:256
    +└   rows = 1:256
    +┌ Info: Window
    +│   cols = 1:256
    +└   rows = 257:512
    +┌ Info: Window
    +│   cols = 1:256
    +└   rows = 513:768
    +┌ Info: Window
    +│   cols = 1:256
    +└   rows = 769:1024
    +┌ Info: Window
    +│   cols = 257:512
    +└   rows = 1:256

    Alternatively, we have another method called ArchGDAL.blocks(band) which iterates over the windows of a raster band, returning the offset and size corresponding to the rasterblocks within that raster band for efficiency:

    blocks = ArchGDAL.blocks(band)
    +for (xyoffset, xysize) in take(blocks, 5)
    +    @info "Window offset" xyoffset xysize
    +end
    ┌ Info: Window offset
    +│   xyoffset = (0, 0)
    +└   xysize = (256, 256)
    +┌ Info: Window offset
    +│   xyoffset = (1, 0)
    +└   xysize = (256, 256)
    +┌ Info: Window offset
    +│   xyoffset = (2, 0)
    +└   xysize = (256, 256)
    +┌ Info: Window offset
    +│   xyoffset = (3, 0)
    +└   xysize = (256, 256)
    +┌ Info: Window offset
    +│   xyoffset = (0, 1)
    +└   xysize = (256, 256)
    Note

    These methods are often used for reading/writing a block of image data efficiently, as it accesses "natural" blocks from the raster band without resampling, or data type conversion.

    Using the DiskArray interface

    Raster bands as 2D DiskArrays

    As of ArchGDAL version 0.5.0 and higher a RasterBand is a subtype of AbstractDiskArray from the DiskArrays.jl package. This means that a RasterBand is also an AbstractArray and can therefore be treated like any Julia array. This means that square bracket indexing works in addition to the read methods described above.

    band[1000:1010,300:310]
    11×11 Matrix{UInt8}:
    + 0x87  0x8a  0x7b  0x5f  0x32  0x08  0x11  0x11  0x0d  0x0e  0x09
    + 0x8c  0x96  0x70  0x70  0x32  0x10  0x0e  0x0e  0x0a  0x11  0x0a
    + 0x88  0xa5  0x87  0x6f  0x25  0x10  0x0f  0x10  0x0a  0x10  0x07
    + 0x80  0x9c  0x87  0x60  0x1c  0x16  0x10  0x0b  0x03  0x0c  0x0f
    + 0x7a  0x7e  0x6e  0x57  0x2d  0x12  0x0f  0x0c  0x05  0x0e  0x0f
    + 0x80  0x6e  0x5e  0x5b  0x3d  0x0a  0x0e  0x13  0x0f  0x13  0x07
    + 0x8f  0x70  0x58  0x5a  0x26  0x0f  0x10  0x11  0x0a  0x11  0x0f
    + 0x96  0x73  0x56  0x63  0x1b  0x13  0x10  0x0d  0x03  0x0e  0x18
    + 0x91  0x71  0x5a  0x80  0x35  0x0b  0x0e  0x13  0x0b  0x10  0x0f
    + 0x87  0x69  0x67  0x84  0x61  0x00  0x0f  0x0c  0x04  0x0c  0x11
    + 0x88  0x6a  0x72  0x70  0x1a  0x0e  0x0f  0x0c  0x09  0x06  0x06

    Also, windowed reading of the data can alternatively be done through the DiskArrays interface:

    using DiskArrays: eachchunk
    +# take only the first 3 chunks to decrease output
    +using Base.Iterators: take
    +for (rows, cols) in take(eachchunk(band), 3)
    +    @info "window" rows cols
    +end
    ┌ Info: window
    +│   rows = 1:256
    +└   cols = 1:256
    +┌ Info: window
    +│   rows = 257:512
    +└   cols = 1:256
    +┌ Info: window
    +│   rows = 513:768
    +└   cols = 1:256

    This code is similar to the window function mentioned in Windowed Reads and Writes but more portable because the raster band can be exchanged with any other type implementing the DiskArrays interface. Also, for many operations it will not be necessary anymore to implement the window loop, since the DiskArrays package provides efficient implementations for reductions and lazy broadcasting, so that for example operations like:

    sum(sqrt.(band), dims=1)
    1×1024 Matrix{Float64}:
    + 7094.48  7094.48  7094.48  7094.48  …  30197.9  30368.0  30295.8  29723.7

    will read the data block by block allocating only the amount of memory in the order of the size of a single raster block. See the DiskArrays README for more information on DiskArrays.jl

    The RasterDataset type

    Many raster datasets that contain multiple bands of the same size and data type can also be abstracted as a 3D array where the last dimension represents the band index. In order to open a raster dataset in a way that it is represented as a 3D AbstractArray there is the readraster funtion. It returns a RasterDataset which is a thin wrapper around a Dataset but it is a subtype of AbstractDiskArray{T,3} and therefore part of the array hierarchy.

    This means that data can be accessed with the square-bracket syntax

    dataset = AG.readraster("gdalworkshop/world.tif")
    +dataset[1000,300,:]
    3-element Vector{UInt8}:
    + 0x87
    + 0x78
    + 0x41

    and broadcasting, views and reductions are provided by the DiskArrays package. In addition, many ArchGDAL functions like (getband, nraster, getgeotransform, etc) are delegated to the wrapped Dataset and work for RasterDatasets as well.

    diff --git a/previews/PR441/reference/index.html b/previews/PR441/reference/index.html new file mode 100644 index 00000000..f8ee6c7c --- /dev/null +++ b/previews/PR441/reference/index.html @@ -0,0 +1,128 @@ + +API Reference · ArchGDAL.jl

    API Reference

    General

    ArchGDAL.arecompatibleMethod
    arecompatible(dtype::OGRFieldType, subtype::OGRFieldSubType)

    Return if type and subtype are compatible.

    References

    • https://gdal.org/development/rfc/rfc50ogrfield_subtype.html
    source
    ArchGDAL.colorinterpMethod
    colorinterp(name::AbstractString)

    Get color interpretation corresponding to the given symbolic name.

    source
    ArchGDAL.getnameMethod
    getname(obj::GDALColorInterp)

    Return name (string) corresponding to color interpretation.

    source
    ArchGDAL.getnameMethod
    getname(obj::OGRFieldSubType)

    Fetch human readable name for a field subtype.

    References

    • https://gdal.org/development/rfc/rfc50ogrfield_subtype.html
    source
    ArchGDAL.iscomplexMethod
    iscomplex(dtype::GDALDataType)

    true if dtype is one of GDT_{CInt16|CInt32|CFloat32|CFloat64}.

    source
    ArchGDAL.typesizeMethod
    typesize(dt::GDALDataType)

    Get the number of bits or zero if it is not recognised.

    source
    ArchGDAL.typeunionMethod
    typeunion(dt1::GDALDataType, dt2::GDALDataType)

    Return the smallest data type that can fully express both input data types.

    source
    ArchGDAL._dummyprogressFunction

    Default progress function, which logs no progress. A progress function should return true to continue, or false to abort.

    source
    ArchGDAL._progresscallbackMethod
    _progresscallback(dfComplete::Cdouble, pszMessage::Cstring, pProgressArg::Ptr{Cvoid})::Cint

    The progress callback function to be passed to GDAL. Users can provide their own progress function by passing a function of the form f(dfComplete::Cdouble, pszMessage::Cstring)::Bool to the progressfunc keyword argument of the functions that implement it, which should be wrapped in a Ref.

    In essence, we pass a pointer to the (user-provided) progress function to GDAL, and GDAL passes it back to us, including the progress ratio and message. We then call the user-provided function with these arguments.

    Parameters

    • dfComplete – completion ratio from 0.0 to 1.0.
    • pszMessage – optional message (made available as an argument to the user-defined progress function).
    • pProgressArg – callback data argument (i.e. user-defined progress function, see _dummyprogress).
    source
    ArchGDAL.clearconfigoptionMethod
    clearconfigoption(option::AbstractString)

    This function can be used to clear a setting.

    Note: it will not unset an existing environment variable; it will just unset a value previously set by setconfigoption().

    source
    ArchGDAL.clearthreadconfigoptionMethod
    clearthreadconfigoption(option::AbstractString)

    This function can be used to clear a setting.

    Note: it will not unset an existing environment variable; it will just unset a value previously set by setthreadconfigoption().

    source
    ArchGDAL.getconfigoptionFunction
    getconfigoption(option::AbstractString, default = C_NULL)

    Get the value of a configuration option.

    The value is the value of a (key, value) option set with setconfigoption(). If the given option was not defined with setconfigoption(), it tries to find it in environment variables.

    Parameters

    • option the key of the option to retrieve
    • default a default value if the key does not match existing defined options

    Returns

    the value associated to the key, or the default value if not found.

    source
    ArchGDAL.getthreadconfigoptionFunction
    getthreadconfigoption(option::AbstractString, default = C_NULL)

    Same as getconfigoption() but with settings from setthreadconfigoption().

    source
    ArchGDAL.metadataMethod
    metadata(obj; domain::AbstractString = "")

    Fetch metadata. Note that relatively few formats return any metadata.

    source
    ArchGDAL.metadataitemMethod
    metadataitem(obj, name::AbstractString, domain::AbstractString)

    Fetch single metadata item.

    Parameters

    • name the name of the metadata item to fetch.
    • domain (optional) the domain to fetch for.

    Returns

    The metadata item on success, or an empty string on failure.

    source
    ArchGDAL.setconfigoptionMethod
    setconfigoption(option::AbstractString, value)

    Set a configuration option for GDAL/OGR use.

    Those options are defined as a (key, value) couple. The value corresponding to a key can be got later with the getconfigoption() method.

    Parameters

    • option the key of the option
    • value the value of the option, or NULL to clear a setting.

    This mechanism is similar to environment variables, but options set with setconfigoption() overrides, for getconfigoption() point of view, values defined in the environment.

    If setconfigoption() is called several times with the same key, the value provided during the last call will be used.

    source
    ArchGDAL.setthreadconfigoptionMethod
    setthreadconfigoption(option::AbstractString, value)

    Set a configuration option for GDAL/OGR use.

    Those options are defined as a (key, value) couple. The value corresponding to a key can be got later with the getconfigoption() method.

    Parameters

    • option the key of the option
    • value the value of the option

    This function sets the configuration option that only applies in the current thread, as opposed to setconfigoption() which sets an option that applies on all threads.

    source
    ArchGDAL.@convertMacro
    @convert(<T1>::<T2>,
    +    <conversions>
    +)

    Generate convert functions both ways between ArchGDAL Enum of typeids (e.g. ArchGDAL.OGRFieldType) and other types or typeids.

    ArchGDAL uses Enum types, listing typeids of various data container used in GDAL/OGR object model. Some of these types are used to implement concrete types in julia through parametric composite types based on those Enum of typeids (e.g. Geometry and IGeometry types with OGRwkbGeometryType)

    Other types or typeids can be:

    • GDAL CEnum.Cenum typeids (e.g. GDAL.OGRFieldType),
    • Base primitive DataType types (e.g. Bool),
    • other parametric composite types (e.g. ImageCore.Normed)

    Arguments

    • (<T1>::<T2>)::Expr: source and target supertypes, where T1<:Enum and T2<:CEnum.Cenum || T2::Type{DataType} || T2::UnionAll}`
    • (<stype1>::<stype2>)::Expr: source and target subtypes or type ids with stype1::T1 and
      • stype2::T2 where T2<:CEnum.Cenum or
      • stype2::T2 where T2::Type{DataType} or
      • stype2<:T2where T2<:UnionAll
    • ...

    Note: In the case where the mapping is not bijective, the last declared typeid of subtype is used. Example:

    @convert(
    +    OGRFieldType::DataType,
    +    OFTInteger::Bool,
    +    OFTInteger::Int16,
    +    OFTInteger::Int32,
    +)

    will generate a convert functions giving:

    • Int32 type for OFTInteger and not Ìnt16
    • OFTInteger OGRFieldType typeid for both Int16 and Int32

    Usage

    General case:

    @convert(GDALRWFlag::GDAL.GDALRWFlag,
    +    GF_Read::GDAL.GF_Read,
    +    GF_Write::GDAL.GF_Write,
    +)

    does the equivalent of

    const GDALRWFlag_to_GDALRWFlag_map = ImmutableDict(
    +    GF_Read => GDAL.GF_Read,
    +    GF_Write => GDAL.GF_Write
    +)
    +Base.convert(::Type{GDAL.GDALRWFlag}, ft::GDALRWFlag) =
    +    GDALRWFlag_to_GDALRWFlag_map[ft]
    +
    +const GDALRWFlag_to_GDALRWFlag_map = ImmutableDict(
    +    GDAL.GF_Read => GF_Read,
    +    GDAL.GF_Write => GF_Write
    +)
    +Base.convert(::Type{GDALRWFlag}, ft::GDAL.GDALRWFlag) =
    +    GDALRWFlag_to_GDALRWFlag_map[ft]

    Case where 1st type <: Enum and 2nd type == DataType or ìsa UnionAll:

    @convert(OGRFieldType::DataType,
    +    OFTInteger::Bool,
    +    OFTInteger::Int16,
    +)

    does the equivalent of

    const OGRFieldType_to_DataType_map = ImmutableDict(
    +    OFTInteger => Bool,
    +    OFTInteger => Int16,
    +)
    +Base.convert(::Type{DataType}, ft::OGRFieldType) =
    +    OGRFieldType_to_DataType_map[ft]
    +
    +Base.convert(::Type{OGRFieldType}, ft::Type{Bool}) = OFTInteger
    +Base.convert(::Type{OGRFieldType}, ft::Type{Int16}) = OFTInteger
    source

    GDAL Constants

    ArchGDAL.GDALAccessType

    The value of GDALAccess could be different from GDAL.GDALAccess.

    It maps correctly to GDAL.GDALAccess if you do e.g.

    convert(GDAL.GDALAccess, ArchGDAL.GA_ReadOnly)
    source
    ArchGDAL.GDALAsyncStatusTypeType

    The value of GDALAsyncStatusType could be different from GDAL.GDALAsyncStatusType.

    It maps correctly to GDAL.GDALAsyncStatusType if you do e.g.

    convert(GDAL.GDALAsyncStatusType, ArchGDAL.GARIO_PENDING)
    source
    ArchGDAL.GDALColorInterpType

    The value of GDALColorInterp could be different from GDAL.GDALColorInterp.

    It maps correctly to GDAL.GDALColorInterp if you do e.g.

    convert(GDAL.GDALColorInterp, ArchGDAL.GCI_Undefined)
    source
    ArchGDAL.GDALDataTypeType

    The value of GDALDataType could be different from GDAL.GDALDataType.

    It maps correctly to GDAL.GDALDataType if you do e.g.

    convert(GDAL.GDALDataType, ArchGDAL.GDT_Unknown)
    source
    ArchGDAL.GDALPaletteInterpType

    The value of GDALPaletteInterp could be different from GDAL.GDALPaletteInterp.

    It maps correctly to GDAL.GDALPaletteInterp if you do e.g.

    convert(GDAL.GDALPaletteInterp, ArchGDAL.GPI_Gray)
    source
    ArchGDAL.GDALRATFieldTypeType

    The value of GDALRATFieldType could be different from GDAL.GDALRATFieldType.

    It maps correctly to GDAL.GDALRATFieldType if you do e.g.

    convert(GDAL.GDALRATFieldType, ArchGDAL.GFT_Integer)
    source
    ArchGDAL.GDALRATFieldUsageType

    The value of GDALRATFieldUsage could be different from GDAL.GDALRATFieldUsage.

    It maps correctly to GDAL.GDALRATFieldUsage if you do e.g.

    convert(GDAL.GDALRATFieldUsage, ArchGDAL.GFU_Generic)
    source
    ArchGDAL.GDALRWFlagType

    The value of GDALRWFlag could be different from GDAL.GDALRWFlag.

    It maps correctly to GDAL.GDALRWFlag if you do e.g.

    convert(GDAL.GDALRWFlag, ArchGDAL.GF_Read)
    source
    ArchGDAL.OGRFieldSubTypeType

    The value of OGRFieldSubType could be different from GDAL.OGRFieldSubType.

    It maps correctly to GDAL.OGRFieldSubType if you do e.g.

    convert(GDAL.OGRFieldSubType, ArchGDAL.OFSTNone)
    source
    ArchGDAL.OGRFieldTypeType

    The value of OGRFieldType could be different from GDAL.OGRFieldType.

    It maps correctly to GDAL.OGRFieldType if you do e.g.

    convert(GDAL.OGRFieldType, ArchGDAL.OFTInteger)
    source
    ArchGDAL.OGRJustificationType

    The value of OGRJustification could be different from GDAL.OGRJustification.

    It maps correctly to GDAL.OGRJustification if you do e.g.

    convert(GDAL.OGRJustification, ArchGDAL.OJUndefined)
    source
    ArchGDAL.OGRSTClassIdType

    The value of OGRSTClassId could be different from GDAL.OGRSTClassId.

    It maps correctly to GDAL.OGRSTClassId if you do e.g.

    convert(GDAL.OGRSTClassId, ArchGDAL.OGRSTCNone)
    source
    ArchGDAL.OGRSTUnitIdType

    The value of OGRSTUnitId could be different from GDAL.OGRSTUnitId.

    It maps correctly to GDAL.OGRSTUnitId if you do e.g.

    convert(GDAL.OGRSTUnitId, ArchGDAL.OGRSTUGround)
    source
    ArchGDAL.OGRwkbByteOrderType

    The value of OGRwkbByteOrder could be different from GDAL.OGRwkbByteOrder.

    It maps correctly to GDAL.OGRwkbByteOrder if you do e.g.

    convert(GDAL.OGRwkbByteOrder, ArchGDAL.wkbXDR)
    source
    ArchGDAL.OGRwkbGeometryTypeType

    The value of OGRwkbGeometryType could be different from GDAL.OGRwkbGeometryType.

    It maps correctly to GDAL.OGRwkbGeometryType if you do e.g.

    convert(GDAL.OGRwkbGeometryType, ArchGDAL.wkbUnknown)
    source

    GDAL Datasets

    ArchGDAL.buildoverviews!Method
    buildoverviews!(dataset::AbstractDataset, overviewlist::Vector{Cint};
    +    bandlist, resampling="NEAREST", progressfunc)

    Build raster overview(s).

    If the operation is unsupported for the indicated dataset, then CEFailure is returned, and CPLGetLastErrorNo() will return CPLENotSupported.

    Parameters

    • overviewlist overview decimation factors to build.

    Keyword Parameters

    • panBandList list of band numbers. Must be in Cint (default = all)
    • sampling one of "NEAREST" (default), "GAUSS","CUBIC","AVERAGE","MODE", "AVERAGE_MAGPHASE" or "NONE" controlling the downsampling method applied.
    • progressfunc a function(::Float64, ::String)::Bool to call to report progress
    source
    ArchGDAL.copyMethod
    copy(dataset::AbstractDataset; [filename, [driver, [<keyword arguments>]]])

    Create a copy of a dataset.

    This method will attempt to create a copy of a raster dataset with the indicated filename, and in this drivers format. Band number, size, type, projection, geotransform and so forth are all to be copied from the provided template dataset.

    Parameters

    • dataset the dataset being duplicated.

    Keyword Arguments

    • filename the filename for the new dataset. UTF-8 encoded.
    • driver the driver to use for creating the new dataset
    • strict $true$ if the copy must be strictly equivalent, or more normally $false$ if the copy may adapt as needed for the output format.
    • options additional format dependent options controlling creation of the output file. The APPEND_SUBDATASET=YES option can be specified to avoid prior destruction of existing dataset.
    • progressfunc a function(::Float64, ::String)::Bool to call to report progress

    Example

    dataset = ArchGDAL.copy(originaldataset)
    +# work with dataset from here

    or

    ArchGDAL.copy(originaldataset) do dataset
    +    # work with dataset from here
    +end

    Returns

    The newly created dataset.

    source
    ArchGDAL.copylayers!Method
    copylayers!(source_dataset, target_dataset; kwargs...)

    Copies a (sub)set of layers from source to target dataset. Note that eventual layer options have to conform with the target dataset driver.

    Currently working drivers: FlatGeobuf, GeoJSON, GeoJSONSeq, GML, GPKG, JML, KML, MapML, ESRI Shapefile, SQLite

    Keyword arguments

    • driver: The driver to use, you have to manually select the right driver for the file extension you wish
    • options: A vector of strings containing KEY=VALUE pairs for driver-specific creation options
    • source_layer_indices: Specifies which layers should be written. Can be e.g. a range, Vector{Int} or tuple.
    • layer_options: Driver specific options for layer creation. The options can either be a Vector{String} to provide the same options for each layer, or a Dict(layer_index => Vector{String}) to provide individual options per layer. Note that layer indexing in GDAL starts with 0. The strings have to be KEY=VALUE pairs. An example for two layers: Dict(0 => ["FORMAT=WKT", "LAUNDER=NO"], 1 => ["STRICT=NO"])
    • chunksize: Number of features to write in one database transaction. Neglected when use_gdal_copy is true.
    • use_gdal_copy: Set this to false (default is true) to achieve higher write speeds at the cost of possible errors. Note that when set to true, no coordinate transformations are possible while writing the features.
    source
    ArchGDAL.copywholeraster!Method
    copywholeraster(source::AbstractDataset, dest::AbstractDataset;
    +    options::StringList, progressfunc::Function)

    Copy all dataset raster data.

    This function copies the complete raster contents of one dataset to another similarly configured dataset. The source and destination dataset must have the same number of bands, and the same width and height. The bands do not have to have the same data type.

    Currently the only options supported are : "INTERLEAVE=PIXEL" to force pixel interleaved operation and "COMPRESSED=YES" to force alignment on target dataset block sizes to achieve best compression. More options may be supported in the future.

    For progress reporting one can pass progressfunc function(::Float64, ::String)::Bool to call to report progress.

    Additional Remarks

    This function is primarily intended to support implementation of driver specific createcopy() functions. It implements efficient copying, in particular "chunking" the copy in substantial blocks and, if appropriate, performing the transfer in a pixel interleaved fashion.

    source
    ArchGDAL.createMethod
    create(filename::AbstractString; driver, width, height, nbands, dtype,
    +    options)

    Create a new dataset.

    Parameters

    • filename the filename for the dataset being created.

    Keyword Arguments

    • driver the driver to use for creating the new dataset
    • options additional format dependent options controlling creation

    of the output file. The APPEND_SUBDATASET=YES option can be specified to avoid prior destruction of existing dataset.

    • width, height, nbands, dtype: only for raster datasets.

    Example

    dataset = ArchGDAL.create(filename; ...)
    +# work with raster dataset from here

    or

    ArchGDAL.create(filename; ...) do dataset
    +    # work with vector dataset from here
    +end

    Returns

    The newly created dataset.

    source
    ArchGDAL.deletelayer!Method
    deletelayer!(dataset::AbstractDataset, i::Integer)

    Delete the indicated layer (at index i; between 0 to nlayer()-1)

    Returns

    OGRERR_NONE on success, or OGRERR_UNSUPPORTED_OPERATION if deleting layers is not supported for this dataset.

    source
    ArchGDAL.filelistMethod
    filelist(dataset::AbstractDataset)

    Fetch files forming dataset.

    Returns a list of files believed to be part of this dataset. If it returns an empty list of files it means there is believed to be no local file system files associated with the dataset (for instance a virtual dataset). The returned file list is owned by the caller and should be deallocated with CSLDestroy().

    The returned filenames will normally be relative or absolute paths depending on the path used to originally open the dataset. The strings will be UTF-8 encoded

    source
    ArchGDAL.getbandMethod
    getband(dataset::AbstractDataset, i::Integer)
    +getband(ds::RasterDataset, i::Integer)

    Fetch a band object for a dataset from its index.

    source
    ArchGDAL.getdriverMethod
    getdriver(dataset::AbstractDataset)

    Fetch the driver that the dataset was created with

    source
    ArchGDAL.getgeotransform!Method
    getgeotransform!(dataset::AbstractDataset, transform::Vector{Cdouble})

    Fetch the affine transformation coefficients.

    Fetches the coefficients for transforming between pixel/line (P,L) raster space, and projection coordinates (Xp,Yp) space.

       Xp = padfTransform[0] + P*padfTransform[1] + L*padfTransform[2];
    +   Yp = padfTransform[3] + P*padfTransform[4] + L*padfTransform[5];

    In a north up image, padfTransform[1] is the pixel width, and padfTransform[5] is the pixel height. The upper left corner of the upper left pixel is at position (padfTransform[0],padfTransform[3]).

    The default transform is (0,1,0,0,0,1) and should be returned even when a CE_Failure error is returned, such as for formats that don't support transformation to projection coordinates.

    Parameters

    • buffer a six double buffer into which the transformation will be placed.

    Returns

    CE_None on success, or CE_Failure if no transform can be fetched.

    source
    ArchGDAL.getlayerMethod
    getlayer(dataset::AbstractDataset, name::AbstractString)

    Fetch the feature layer corresponding to the given name

    The returned layer remains owned by the dataset and should not be deleted by the application.

    source
    ArchGDAL.getlayerMethod
    getlayer(dataset::AbstractDataset, i::Integer)

    Fetch the layer at index i (between 0 and nlayer(dataset)-1)

    The returned layer remains owned by the dataset and should not be deleted by the application.

    source
    ArchGDAL.getlayerMethod
    getlayer(dataset::AbstractDataset)

    Fetch the first layer and raise an error if dataset contains more than one layer

    The returned layer remains owned by the dataset and should not be deleted by the application.

    source
    ArchGDAL.getprojMethod
    getproj(dataset::AbstractDataset)

    Fetch the projection definition string for this dataset in OpenGIS WKT format.

    It should be suitable for use with the OGRSpatialReference class. When a projection definition is not available an empty (but not NULL) string is returned.

    source
    ArchGDAL.ngcpMethod
    ngcp(dataset::AbstractDataset)

    Get number of GCPs for this dataset. Zero if there are none.

    source
    ArchGDAL.nlayerMethod
    nlayer(dataset::AbstractDataset)

    Fetch the number of feature layers on this dataset.

    source
    ArchGDAL.nrasterMethod
    nraster(dataset::AbstractDataset)

    Fetch the number of raster bands on this dataset.

    source
    ArchGDAL.pixeltypeMethod
    pixeltype(ds::AbstractDataset)

    Tries to determine a common dataset type for all the bands in a raster dataset.

    source
    ArchGDAL.readMethod
    read(filename; flags=OF_READONLY, alloweddrivers, options, siblingfiles)

    Open a raster file

    Parameters

    • filename: the filename of the dataset to be read.

    Keyword Arguments

    • flags: a combination of OF_* flags (listed below) that may be combined through the logical | operator. It defaults to OF_READONLY.
      • Driver kind: OF_Raster for raster drivers, OF_Vector for vector drivers. If none of the value is specified, both are implied.
      • Access mode: OF_READONLY (exclusive) or OF_UPDATE.
      • Shared mode: OF_Shared. If set, it allows the sharing of handles for a dataset with other callers that have set OF_Shared.
      • Verbose error: OF_VERBOSE_ERROR. If set, a failed attempt to open the file will lead to an error message to be reported.
    • options: additional format dependent options.

    Example

    dataset = ArchGDAL.read("point.shp")
    +# work with dataset from here

    or

    ArchGDAL.read("point.shp") do dataset
    +    # work with dataset from here
    +end

    Returns

    The corresponding dataset.

    source
    ArchGDAL.releaseresultsetMethod
    releaseresultset(dataset::AbstractDataset, layer::FeatureLayer)

    Release results of ExecuteSQL().

    This function should only be used to deallocate OGRLayers resulting from an ExecuteSQL() call on the same Dataset. Failure to deallocate a results set before destroying the Dataset may cause errors.

    Parameters

    • dataset: the dataset handle.
    • layer: the result of a previous ExecuteSQL() call.
    source
    ArchGDAL.setgeotransform!Method
    setgeotransform!(dataset::AbstractDataset, transform::Vector{Cdouble})

    Set the affine transformation coefficients.

    source
    ArchGDAL.setproj!Method
    setproj!(dataset::AbstractDataset, projstring::AbstractString)

    Set the projection reference string for this dataset.

    source
    ArchGDAL.testcapabilityMethod
    testcapability(dataset::AbstractDataset, capability::AbstractString)

    Test if capability is available. true if capability available otherwise false.

    One of the following dataset capability names can be passed into this function, and a true or false value will be returned indicating whether or not the capability is available for this object.

    • ODsCCreateLayer: True if this datasource can create new layers.
    • ODsCDeleteLayer: True if this datasource can delete existing layers.
    • ODsCCreateGeomFieldAfterCreateLayer: True if the layers of this datasource support CreateGeomField() just after layer creation.
    • ODsCCurveGeometries: True if this datasource supports curve geometries.
    • ODsCTransactions: True if this datasource supports (efficient) transactions.
    • ODsCEmulatedTransactions: True if this datasource supports transactions through emulation.

    The #define macro forms of the capability names should be used in preference to the strings themselves to avoid misspelling.

    Parameters

    • dataset: the dataset handle.
    • capability: the capability to test.
    source
    ArchGDAL.unsafe_copyMethod
    unsafe_copy(dataset::AbstractDataset; [filename, [driver,
    +    [<keyword arguments>]]])

    Create a copy of a dataset.

    This method will attempt to create a copy of a raster dataset with the indicated filename, and in this drivers format. Band number, size, type, projection, geotransform and so forth are all to be copied from the provided template dataset.

    Parameters

    • dataset the dataset being duplicated.

    Keyword Arguments

    • filename the filename for the new dataset. UTF-8 encoded.
    • driver the driver to use for creating the new dataset
    • strict $true$ if the copy must be strictly equivalent, or more normally $false$ if the copy may adapt as needed for the output format.
    • options additional format dependent options controlling creation of the output file. The APPEND_SUBDATASET=YES option can be specified to avoid prior destruction of existing dataset.
    • progressfunc a function(::Float64, ::String)::Bool to call to report progress

    Returns

    a pointer to the newly created dataset (may be read-only access).

    Additional Remarks

    Note: many sequential write once formats (such as JPEG and PNG) don't implement the Create() method but do implement this CreateCopy() method. If the driver doesn't implement CreateCopy(), but does implement Create() then the default CreateCopy() mechanism built on calling Create() will be used.

    It is intended that CreateCopy() will often be used with a source dataset which is a virtual dataset allowing configuration of band types, and other information without actually duplicating raster data (see the VRT driver). This is what is done by the gdal_translate utility for example.

    This function will validate the creation option list passed to the driver with the GDALValidateCreationOptions() method. This check can be disabled by defining the configuration option GDAL_VALIDATE_CREATION_OPTIONS=NO.

    After you have finished working with the returned dataset, it is required to close it with GDALClose(). This does not only close the file handle, but also ensures that all the data and metadata has been written to the dataset (GDALFlushCache() is not sufficient for that purpose).

    In some situations, the new dataset can be created in another process through the GDAL API Proxy mechanism.

    source
    ArchGDAL.unsafe_createMethod
    unsafe_create(filename::AbstractString; driver, width, height, nbands,
    +    dtype, options)

    Create a new dataset.

    What argument values are legal for particular drivers is driver specific, and there is no way to query in advance to establish legal values.

    That function will try to validate the creation option list passed to the driver with the GDALValidateCreationOptions() method. This check can be disabled by defining the configuration option GDALVALIDATECREATION_OPTIONS=NO.

    After you have finished working with the returned dataset, it is required to close it with GDALClose(). This does not only close the file handle, but also ensures that all the data and metadata has been written to the dataset (GDALFlushCache() is not sufficient for that purpose).

    In some situations, the new dataset can be created in another process through the GDAL API Proxy mechanism.

    In GDAL 2, the arguments nXSize, nYSize and nBands can be passed to 0 when creating a vector-only dataset for a compatible driver.

    source
    ArchGDAL.unsafe_executesqlMethod
    unsafe_executesql(dataset::AbstractDataset, query::AbstractString; dialect,
    +    spatialfilter)

    Execute an SQL statement against the data store.

    The result of an SQL query is either NULL for statements that are in error, or that have no results set, or an OGRLayer pointer representing a results set from the query. Note that this OGRLayer is in addition to the layers in the data store and must be destroyed with ReleaseResultSet() before the dataset is closed (destroyed).

    For more information on the SQL dialect supported internally by OGR review the OGR SQL document. Some drivers (i.e. Oracle and PostGIS) pass the SQL directly through to the underlying RDBMS.

    Starting with OGR 1.10, the SQLITE dialect can also be used.

    Parameters

    • dataset: the dataset handle.
    • query: the SQL statement to execute.
    • spatialfilter: geometry which represents a spatial filter. Can be NULL.
    • dialect: allows control of the statement dialect. If set to NULL, the OGR SQL engine will be used, except for RDBMS drivers that will use their dedicated SQL engine, unless OGRSQL is explicitly passed as the dialect. Starting with OGR 1.10, the SQLITE dialect can also be used.

    Returns

    an OGRLayer containing the results of the query. Deallocate with ReleaseResultSet().

    source
    ArchGDAL.unsafe_readMethod
    unsafe_read(filename; flags=OF_READONLY, alloweddrivers, options,
    +    siblingfiles)

    Open a raster file as a Dataset.

    This function will try to open the passed file, or virtual dataset name by invoking the Open method of each registered Driver in turn. The first successful open will result in a returned dataset. If all drivers fail then NULL is returned and an error is issued.

    Parameters

    • filename the name of the file to access. In the case of exotic drivers

    this may not refer to a physical file, but instead contain information for the driver on how to access a dataset. It should be in UTF-8 encoding.

    • flags a combination of GDAL_OF_* flags (listed below) that may be combined through the logical | operator.

      • Driver kind: GDALOFRASTER for raster drivers, GDALOFVECTOR for vector drivers. If none of the value is specified, both are implied.
      • Access mode: OF_READONLY (exclusive) or OF_UPDATE.
      • Shared mode: GDAL_OF_SHARED. If set, it allows the sharing of Dataset handles for a dataset with other callers that have set GDALOFSHARED. In particular, GDALOpenEx() will consult its list of currently open and shared Dataset's, and if the GetDescription() name for one exactly matches the pszFilename passed to GDALOpenEx() it will be referenced and returned, if GDALOpenEx() is called from the same thread.
      • Verbose error: GDALOFVERBOSE_ERROR. If set, a failed attempt to open the file will lead to an error message to be reported.
    • options: additional format dependent options.

    Additional Remarks

    Several recommendations:

    • If you open a dataset object with GA_Update access, it is not recommended

    to open a new dataset on the same underlying file.

    • The returned dataset should only be accessed by one thread at a time. To use

    it from different threads, you must add all necessary code (mutexes, etc.) to avoid concurrent use of the object. (Some drivers, such as GeoTIFF, maintain internal state variables that are updated each time a new block is read, preventing concurrent use.)

    • In order to reduce the need for searches through the operating system file

    system machinery, it is possible to give an optional list of files with the papszSiblingFiles parameter. This is the list of all files at the same level in the file system as the target file, including the target file. The filenames must not include any path components, are essentially just the output of VSIReadDir() on the parent directory. If the target object does not have filesystem semantics then the file list should be NULL.

    In some situations (dealing with unverified data), the datasets can be opened in another process through the GDAL API Proxy mechanism.

    For drivers supporting the VSI virtual file API, it is possible to open a file in a .zip archive (see VSIInstallZipFileHandler()), a .tar/.tar.gz/.tgz archive (see VSIInstallTarFileHandler()), or a HTTP / FTP server (see VSIInstallCurlFileHandler())

    source
    ArchGDAL.writeMethod
    write(dataset::AbstractDataset, filename::AbstractString; kwargs...)

    Writes the dataset to the designated filename.

    Parameters

    • dataset: The dataset to write
    • filename: The filename, UTF-8 encoded.

    Keyword Arguments

    • driver (ArchGDAL.Driver): The driver to use, you have to manually select the right driver via getdriver(drivername) matching the file extension you wish. Otherwise the driver of the source dataset will be used.
    • options (Vector{String}): A vector of strings containing KEY=VALUE pairs for driver-specific creation options.
    • layers: Specifies which layers should be written. Can be e.g. a range, Vector{Int} or tuple.
    • layer_options: Driver specific options for layer creation. The options can either be a Vector{String} to provide the same options for each layer, or a Vector{Vector{String}} to provide individual options per layer, in the order of their appearance in the dataset. The strings have to be KEY=VALUE pairs. If you give less individual options than there are layers, the remaining layers use the default creation options. An example for two layers: Dict(0 => ["FORMAT=WKT", "LAUNDER=NO"], 1 => ["STRICT=NO"])
    • use_gdal_copy (Bool): Set this to false (default is true) to achieve higher write speeds at the cost of possible errors. Note that when set to true, no coordinate transformations are possible while writing the features.
    • chunksize (Integer): Number of features to write in one database transaction. Neglected when use_gdal_copy is true. Default is 20000.
    • strict (Bool): Set this to true if the written dataset should be a 1:1 copy of the source data, default is false, which allows the driver to adapt if necessary.

    Returns

    `nothing`
    source
    ArchGDAL.writelayersMethod
    writelayers(dataset, filename; kwargs...)

    Writes the vector dataset to the designated filename. The options are passed to the newly created dataset and have to be given as a list of strings in KEY=VALUE format. The chunksize controls the number of features written in each database transaction, e.g. for SQLite. This function can also be used to copy datasets on disk.

    Currently working drivers: FlatGeobuf, GeoJSON, GeoJSONSeq, GML, GPKG, JML, KML, MapML, ESRI Shapefile, SQLite

    Parameters

    • dataset The source dataset
    • filename The file name to write to

    Keyword arguments

    • driver: The driver to use, you have to manually select the right driver for the file extension you wish
    • options: A vector of strings containing KEY=VALUE pairs for driver-specific creation options
    • layer_indices: Specifies which layers should be written. Can be e.g. a range, Vector{Int} or tuple.
    • layer_options: Driver specific options for layer creation. The options can either be a Vector{String} to provide the same options for each layer, or a Dict(layer_index => Vector{String}) to provide individual options per layer. Note that layer indexing in GDAL starts with 0. The strings have to be KEY=VALUE pairs. An example for two layers: Dict(0 => ["FORMAT=WKT", "LAUNDER=NO"], 1 => ["STRICT=NO"])
    • chunksize: Number of features to write in one database transaction. Neglected when use_gdal_copy is true.
    • use_gdal_copy: Set this to false (default is true) to achieve higher write speeds at the cost of possible errors. Note that when set to true, no coordinate transformations are possible while writing the features.

    Returns

    nothing

    source

    Feature Data

    ArchGDAL.asbinaryMethod
    asbinary(feature::AbstractFeature, i::Integer)

    Fetch field value as binary.

    Parameters

    • hFeat: handle to the feature that owned the field.
    • iField: the field to fetch, from 0 to GetFieldCount()-1.

    Returns

    the field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief.

    source
    ArchGDAL.asboolMethod
    asbool(feature::AbstractFeature, i::Integer)

    Fetch field value as a boolean

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asdatetimeMethod
    asdatetime(feature::AbstractFeature, i::Integer)

    Fetch field value as date and time. Currently this method only works for OFTDate, OFTTime and OFTDateTime fields.

    Parameters

    • hFeat: handle to the feature that owned the field.
    • iField: the field to fetch, from 0 to GetFieldCount()-1.

    Returns

    true on success or false on failure.

    source
    ArchGDAL.asdoubleMethod
    asdouble(feature::AbstractFeature, i::Integer)

    Fetch field value as a double.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asdoublelistMethod
    asdoublelist(feature::AbstractFeature, i::Integer)

    Fetch field value as a list of doubles.

    Parameters

    • hFeat: handle to the feature that owned the field.
    • iField: the field to fetch, from 0 to GetFieldCount()-1.
    • pnCount: an integer to put the list count (number of doubles) into.

    Returns

    the field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief. If *pnCount is zero on return the returned pointer may be NULL or non-NULL.

    source
    ArchGDAL.asintMethod
    asint(feature::AbstractFeature, i::Integer)

    Fetch field value as integer.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asint16Method
    asint16(feature::AbstractFeature, i::Integer)

    Fetch field value as integer 16 bit.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asint64Method
    asint64(feature::AbstractFeature, i::Integer)

    Fetch field value as integer 64 bit.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asint64listMethod
    asint64list(feature::AbstractFeature, i::Integer)

    Fetch field value as a list of 64 bit integers.

    Parameters

    • hFeat: handle to the feature that owned the field.
    • iField: the field to fetch, from 0 to GetFieldCount()-1.
    • pnCount: an integer to put the list count (number of integers) into.

    Returns

    the field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief. If *pnCount is zero on return the returned pointer may be NULL or non-NULL.

    source
    ArchGDAL.asintlistMethod
    asintlist(feature::AbstractFeature, i::Integer)

    Fetch field value as a list of integers.

    Parameters

    • hFeat: handle to the feature that owned the field.
    • iField: the field to fetch, from 0 to GetFieldCount()-1.
    • pnCount: an integer to put the list count (number of integers) into.

    Returns

    the field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief. If *pnCount is zero on return the returned pointer may be NULL or non-NULL.

    source
    ArchGDAL.assingleMethod

    assingle(feature::AbstractFeature, i::Integer)

    Fetch field value as a single.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asstringMethod
    asstring(feature::AbstractFeature, i::Integer)

    Fetch field value as a string.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.asstringlistMethod
    asstringlist(feature::AbstractFeature, i::Integer)

    Fetch field value as a list of strings.

    Parameters

    • hFeat: handle to the feature that owned the field.
    • iField: the field to fetch, from 0 to GetFieldCount()-1.

    Returns

    the field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief.

    source
    ArchGDAL.destroyMethod
    destroy(feature::AbstractFeature)

    Destroy the feature passed in.

    The feature is deleted, but within the context of the GDAL/OGR heap. This is necessary when higher level applications use GDAL/OGR from a DLL and they want to delete a feature created within the DLL. If the delete is done in the calling application the memory will be freed onto the application heap which is inappropriate.

    source
    ArchGDAL.fillunsetwithdefault!Method
    fillunsetwithdefault!(feature::AbstractFeature; notnull = true,
    +    options = StringList(C_NULL))

    Fill unset fields with default values that might be defined.

    Parameters

    • feature: handle to the feature.
    • notnull: if we should fill only unset fields with a not-null constraint.
    • papszOptions: unused currently. Must be set to NULL.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    ArchGDAL.findfieldindexMethod
    findfieldindex(feature::AbstractFeature, name::Union{AbstractString, Symbol})

    Fetch the field index given field name.

    Parameters

    • feature: the feature on which the field is found.
    • name: the name of the field to search for.

    Returns

    the field index, or nothing if no matching field is found.

    Remarks

    This is a cover for the OGRFeatureDefn::GetFieldIndex() method.

    source
    ArchGDAL.findgeomindexFunction
    findgeomindex(feature::AbstractFeature, name::Union{AbstractString, Symbol} = "")

    Fetch the geometry field index given geometry field name.

    Parameters

    • feature: the feature on which the geometry field is found.
    • name: the name of the geometry field to search for. (defaults to "")

    Returns

    the geometry field index, or -1 if no matching geometry field is found.

    Remarks

    This is a cover for the OGRFeatureDefn::GetGeomFieldIndex() method.

    source
    ArchGDAL.getfidMethod
    getfid(feature::AbstractFeature)

    Get feature identifier.

    Returns

    feature id or OGRNullFID (-1) if none has been assigned.

    source
    ArchGDAL.getfieldMethod
    getfield(feature, i)

    When the field is unset, it will return nothing. When the field is set but null, it will return missing.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    • https://gdal.org/development/rfc/rfc67_nullfieldvalues.html
    source
    ArchGDAL.getfielddefnMethod
    getfielddefn(feature::AbstractFeature, i::Integer)

    Fetch definition for this field.

    Parameters

    • feature: the feature on which the field is found.
    • i: the field to fetch, from 0 to GetFieldCount()-1.

    Returns

    an handle to the field definition (from the FeatureDefn). This is an internal reference, and should not be deleted or modified.

    source
    ArchGDAL.getgeomMethod
    getgeom(feature::AbstractFeature, i::Integer)

    Returns a clone of the feature geometry at index i.

    Parameters

    • feature: the feature to get geometry from.
    • i: geometry field to get.
    source
    ArchGDAL.getgeomMethod
    getgeom(feature::AbstractFeature)

    Returns a clone of the geometry corresponding to the feature.

    source
    ArchGDAL.getgeomdefnMethod
    getgeomdefn(feature::AbstractFeature, i::Integer)

    Fetch definition for this geometry field.

    Parameters

    • feature: the feature on which the field is found.
    • i: the field to fetch, from 0 to GetGeomFieldCount()-1.

    Returns

    The field definition (from the OGRFeatureDefn). This is an internal reference, and should not be deleted or modified.

    source
    ArchGDAL.getmediatypeMethod
    getmediatype(feature::AbstractFeature)

    Returns the native media type for the feature.

    The native media type is the identifier for the format of the native data. It follows the IANA RFC 2045 (see https://en.wikipedia.org/wiki/Media_type), e.g. "application/vnd.geo+json" for JSON.

    source
    ArchGDAL.getnativedataMethod
    getnativedata(feature::AbstractFeature)

    Returns the native data for the feature.

    The native data is the representation in a "natural" form that comes from the driver that created this feature, or that is aimed at an output driver. The native data may be in different format, which is indicated by GetNativeMediaType().

    Note that most drivers do not support storing the native data in the feature object, and if they do, generally the NATIVE_DATA open option must be passed at dataset opening.

    The "native data" does not imply it is something more performant or powerful than what can be obtained with the rest of the API, but it may be useful in round-tripping scenarios where some characteristics of the underlying format are not captured otherwise by the OGR abstraction.

    source
    ArchGDAL.isfieldnullMethod
    isfieldnull(feature::AbstractFeature, i::Integer)

    Test if a field is null.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to test, from 0 to GetFieldCount()-1.

    Returns

    true if the field is null, otherwise false.

    References

    • https://gdal.org/development/rfc/rfc67_nullfieldvalues.html
    source
    ArchGDAL.isfieldsetMethod
    isfieldset(feature::AbstractFeature, i::Integer)

    Test if a field has ever been assigned a value or not.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.isfieldsetandnotnullMethod
    isfieldsetandnotnull(feature::AbstractFeature, i::Integer)

    Test if a field is set and not null.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to test, from 0 to GetFieldCount()-1.

    Returns

    true if the field is set and not null, otherwise false.

    References

    • https://gdal.org/development/rfc/rfc67_nullfieldvalues.html
    source
    ArchGDAL.nfieldMethod
    nfield(feature::AbstractFeature)

    Fetch number of fields on this feature.

    This will always be the same as the field count for the OGRFeatureDefn.

    source
    ArchGDAL.ngeomMethod
    ngeom(feature::AbstractFeature)

    Fetch number of geometry fields on this feature.

    This will always be the same as the geometry field count for OGRFeatureDefn.

    source
    ArchGDAL.setfid!Method
    setfid!(feature::AbstractFeature, i::Integer)

    Set the feature identifier.

    Parameters

    • feature: handle to the feature to set the feature id to.
    • i: the new feature identifier value to assign.

    Returns

    On success OGRERR_NONE, or on failure some other value.

    source
    ArchGDAL.setfield!Function
    setfield!(feature::AbstractFeature, i::Integer, value)
    +setfield!(feature::AbstractFeature, i::Integer, value::DateTime, tzflag::Int = 0)

    Set a feature's i-th field to value.

    The following types for value are accepted: Int32, Int64, Float64, AbstractString, or a Vector with those in it, as well as Vector{UInt8}. For DateTime values, an additional keyword argument tzflag is accepted (0=unknown, 1=localtime, 100=GMT, see data model for details).

    OFTInteger, OFTInteger64 and OFTReal fields will be set directly. OFTString fields will be assigned a string representation of the value, but not necessarily taking into account formatting constraints on this field. Other field types may be unaffected.

    Parameters

    • feature: handle to the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    • value: the value to assign.
    source
    ArchGDAL.setfieldnull!Method
    setfieldnull!(feature::AbstractFeature, i::Integer)

    Clear a field, marking it as null.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to set to null, from 0 to GetFieldCount()-1.

    References

    • https://gdal.org/development/rfc/rfc67_nullfieldvalues.html
    source
    ArchGDAL.setfrom!Function
    setfrom!(feature1::AbstractFeature, feature2::AbstractFeature, forgiving::Bool = false)
    +setfrom!(feature1::AbstractFeature, feature2::AbstractFeature, indices::Vector{Cint},
    +    forgiving::Bool = false)

    Set one feature from another.

    Parameters

    • feature1: handle to the feature to set to.
    • feature2: handle to the feature from which geometry, and field values will be copied.
    • indices: indices of the destination feature's fields stored at the corresponding index of the source feature's fields. A value of -1 should be used to ignore the source's field. The array should not be NULL and be as long as the number of fields in the source feature.
    • forgiving: true if the operation should continue despite lacking output fields matching some of the source fields.

    Returns

    OGRERR_NONE if the operation succeeds, even if some values are not transferred, otherwise an error code.

    source
    ArchGDAL.setgeom!Method
    setgeom!(feature::AbstractFeature, geom::AbstractGeometry)

    Set feature geometry.

    This method updates the features geometry, and operate exactly as SetGeometryDirectly(), except that this method does not assume ownership of the passed geometry, but instead makes a copy of it.

    Parameters

    • feature: the feature on which new geometry is applied to.
    • geom: the new geometry to apply to feature.

    Returns

    OGRERR_NONE if successful, or OGR_UNSUPPORTED_GEOMETRY_TYPE if the geometry type is illegal for the OGRFeatureDefn (checking not yet implemented).

    source
    ArchGDAL.setgeom!Method
    setgeom!(feature::AbstractFeature, i::Integer, geom::AbstractGeometry)

    Set feature geometry of a specified geometry field.

    This function updates the features geometry, and operate exactly as SetGeometryDirectly(), except that this function does not assume ownership of the passed geometry, but instead makes a copy of it.

    Parameters

    • feature: the feature on which to apply the geometry.
    • i: geometry field to set.
    • geom: the new geometry to apply to feature.

    Returns

    OGRERR_NONE if successful, or OGR_UNSUPPORTED_GEOMETRY_TYPE if the geometry type is illegal for the OGRFeatureDefn (checking not yet implemented).

    source
    ArchGDAL.setmediatype!Method
    setmediatype!(feature::AbstractFeature, mediatype::AbstractString)

    Sets the native media type for the feature.

    The native media type is the identifier for the format of the native data. It follows the IANA RFC 2045 (see https://en.wikipedia.org/wiki/Media_type), e.g. "application/vnd.geo+json" for JSON.

    source
    ArchGDAL.setnativedata!Method
    setnativedata!(feature::AbstractFeature, data::AbstractString)

    Sets the native data for the feature.

    The native data is the representation in a "natural" form that comes from the driver that created this feature, or that is aimed at an output driver. The native data may be in different format, which is indicated by GetNativeMediaType().

    source
    ArchGDAL.setstylestring!Method
    setstylestring!(feature::AbstractFeature, style::AbstractString)

    Set feature style string.

    This method operate exactly as setstylestringdirectly!() except that it doesn't assume ownership of the passed string, but makes a copy of it.

    source
    ArchGDAL.unsafe_cloneMethod
    unsafe_clone(feature::AbstractFeature)

    Duplicate feature.

    The newly created feature is owned by the caller, and will have its own reference to the OGRFeatureDefn.

    source
    ArchGDAL.unsetfield!Method
    unsetfield!(feature::AbstractFeature, i::Integer)

    Clear a field, marking it as unset.

    Parameters

    • feature: the feature that owned the field.
    • i: the field to fetch, from 0 to GetFieldCount()-1.
    source
    ArchGDAL.validateMethod
    validate(feature::AbstractFeature, flags::Integer, emiterror::Bool)

    Validate that a feature meets constraints of its schema.

    The scope of test is specified with the nValidateFlags parameter.

    Regarding OGR_F_VAL_WIDTH, the test is done assuming the string width must be interpreted as the number of UTF-8 characters. Some drivers might interpret the width as the number of bytes instead. So this test is rather conservative (if it fails, then it will fail for all interpretations).

    Parameters

    • feature: handle to the feature to validate.
    • flags: OGR_F_VAL_ALL or combination of OGR_F_VAL_NULL, OGR_F_VAL_GEOM_TYPE, OGR_F_VAL_WIDTH and OGR_F_VAL_ALLOW_NULL_WHEN_DEFAULT with | operator
    • emiterror: true if a CPLError() must be emitted when a check fails

    Returns

    true if all enabled validation tests pass.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    Base.keysMethod
    keys(feature::AbstractFeature)

    Fetch the keys or names on this feature.

    source
    Base.valuesMethod
    values(feature::AbstractFeature)

    Fetch the values this feature.

    source
    ArchGDAL.addfielddefn!Method
    addfielddefn!(featuredefn::FeatureDefn, fielddefn::FieldDefn)

    Add a new field definition to the passed feature definition.

    To add a new field definition to a layer definition, do not use this function directly, but use OGRLCreateField() instead.

    This function should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn. The OGRFieldDefn passed in is copied, and remains the responsibility of the caller.

    source
    ArchGDAL.addgeomdefn!Method
    addgeomdefn!(featuredefn::FeatureDefn, geomfielddefn::AbstractGeomFieldDefn)

    Add a new field definition to the passed feature definition.

    To add a new geometry field definition to a layer definition, do not use this function directly, but use OGRLayer::CreateGeomField() instead.

    This method does an internal copy of the passed geometry field definition, unless bCopy is set to false (in which case it takes ownership of the field definition.

    This method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.

    source
    ArchGDAL.deletefielddefn!Method
    deletefielddefn!(featuredefn::FeatureDefn, i::Integer)

    Delete an existing field definition.

    To delete an existing field definition from a layer definition, do not use this function directly, but use OGR_L_DeleteField() instead.

    This method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.

    source
    ArchGDAL.deletegeomdefn!Method
    deletegeomdefn!(featuredefn::FeatureDefn, i::Integer)

    Delete an existing geometry field definition.

    To delete an existing field definition from a layer definition, do not use this function directly, but use OGRLayer::DeleteGeomField() instead.

    This method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.

    source
    ArchGDAL.dereferenceMethod
    dereference(featuredefn::FeatureDefn)

    Decrements the reference count by one, and returns the updated count.

    source
    ArchGDAL.destroyMethod

    Destroy a feature definition object and release all memory associated with it

    source
    ArchGDAL.findfieldindexMethod
    findfieldindex(featuredefn::AbstractFeatureDefn,
    +    name::Union{AbstractString, Symbol})

    Find field by name.

    Returns

    the field index, or -1 if no match found.

    Remarks

    This uses the OGRFeatureDefn::GetFieldIndex() method.

    source
    ArchGDAL.findgeomindexFunction
    findgeomindex(featuredefn::AbstractFeatureDefn, name::AbstractString = "")

    Find geometry field by name.

    The geometry field index of the first geometry field matching the passed field name (case insensitively) is returned.

    Returns

    the geometry field index, or -1 if no match found.

    source
    ArchGDAL.getfielddefnMethod
    getfielddefn(featuredefn::FeatureDefn, i::Integer)

    Fetch field definition of the passed feature definition.

    Parameters

    • featuredefn: the feature definition to get the field definition from.
    • i: index of the field to fetch, between 0 and nfield(featuredefn)-1.

    Returns

    an handle to an internal field definition object or NULL if invalid index. This object should not be modified or freed by the application.

    source
    ArchGDAL.getgeomdefnFunction
    getgeomdefn(featuredefn::FeatureDefn, i::Integer = 0)

    Fetch geometry field definition of the passed feature definition.

    Parameters

    • i geometry field to fetch, between 0 (default) and ngeomfield(fd)-1.

    Returns

    an internal field definition object or NULL if invalid index. This object should not be modified or freed by the application.

    source
    ArchGDAL.getgeomtypeMethod
    getgeomtype(featuredefn::AbstractFeatureDefn)

    Fetch the geometry base type of the passed feature definition.

    For layers without any geometry field, this method returns wkbNone.

    This returns the same result as OGR_FD_GetGeomType(OGR_L_GetLayerDefn(hLayer)) but for a few drivers, calling OGR_L_GetGeomType() directly can avoid lengthy layer definition initialization.

    For layers with multiple geometry fields, this method only returns the geometry type of the first geometry column. For other columns, use OGR_GFld_GetType(OGR_FD_GetGeomFieldDefn(OGR_L_GetLayerDefn(hLayer), i)).

    source
    ArchGDAL.getnameMethod
    getname(featuredefn::AbstractFeatureDefn)

    Get name of the OGRFeatureDefn passed as an argument.

    source
    ArchGDAL.isgeomignoredMethod
    isgeomignored(featuredefn::AbstractFeatureDefn)

    Determine whether the geometry can be omitted when fetching features.

    source
    ArchGDAL.issameMethod
    issame(featuredefn1::AbstractFeatureDefn, featuredefn2::AbstractFeatureDefn)

    Test if the feature definition is identical to the other one.

    source
    ArchGDAL.isstyleignoredMethod
    isstyleignored(featuredefn::AbstractFeatureDefn)

    Determine whether the style can be omitted when fetching features.

    source
    ArchGDAL.nfieldMethod
    nfield(featuredefn::AbstractFeatureDefn)

    Fetch number of fields on the passed feature definition.

    source
    ArchGDAL.ngeomMethod
    ngeom(featuredefn::AbstractFeatureDefn)

    Fetch number of geometry fields on the passed feature definition.

    source
    ArchGDAL.referenceMethod
    reference(featuredefn::FeatureDefn)

    Increments the reference count in the FeatureDefn by one.

    The count is used to track the number of Features referencing this definition.

    Returns

    The updated reference count.

    source
    ArchGDAL.releaseMethod
    release(featuredefn::FeatureDefn)

    Drop a reference, and destroy if unreferenced.

    source
    ArchGDAL.reorderfielddefns!Method
    reorderfielddefns!(featuredefn::FeatureDefn, indices::Vector{Cint})

    Reorder the field definitions in the array of the feature definition.

    To reorder the field definitions in a layer definition, do not use this function directly, but use OGR_L_ReorderFields() instead.

    This method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.

    Parameters

    • fd: handle to the feature definition.
    • indices: an array of GetFieldCount() elements which is a permutation of [0, GetFieldCount()-1]. indices is such that, for each field definition at position i after reordering, its position before reordering was indices[i].
    source
    ArchGDAL.setgeomignored!Method
    setgeomignored!(featuredefn::FeatureDefn, ignore::Bool)

    Set whether the geometry can be omitted when fetching features.

    source
    ArchGDAL.setgeomtype!Method
    setgeomtype!(featuredefn::FeatureDefn, etype::OGRwkbGeometryType)

    Assign the base geometry type for the passed layer (same as the fd).

    All geometry objects using this type must be of the defined type or a derived type. The default upon creation is wkbUnknown which allows for any geometry type. The geometry type should generally not be changed after any OGRFeatures have been created against this definition.

    source
    ArchGDAL.setstyleignored!Method
    setstyleignored!(featuredefn::FeatureDefn, ignore::Bool)

    Set whether the style can be omitted when fetching features.

    source
    ArchGDAL.unsafe_createfeatureMethod
    unsafe_createfeature(featuredefn::AbstractFeatureDefn)

    Returns the new feature object with null fields and no geometry

    Note that the OGRFeature will increment the reference count of it's defining OGRFeatureDefn. Destruction of the OGRFeatureDefn before destruction of all OGRFeatures that depend on it is likely to result in a crash.

    Starting with GDAL 2.1, returns NULL in case out of memory situation.

    source
    ArchGDAL.unsafe_createfeaturedefnMethod
    unsafe_createfeaturedefn(name::AbstractString)

    Create a new feature definition object to hold field definitions.

    The FeatureDefn maintains a reference count, but this starts at zero, and should normally be incremented by the owner.

    source
    ArchGDAL.addfeature!Method
    addfeature!(layer::AbstractFeatureLayer, feature::AbstractFeature)

    Write a new feature within a layer.

    Remarks

    The passed feature is written to the layer as a new feature, rather than overwriting an existing one. If the feature has a feature id other than OGRNullFID, then the native implementation may use that as the feature id of the new feature, but not necessarily. Upon successful return the passed feature will have been updated with the new feature id.

    source
    ArchGDAL.addfielddefn!Method
    addfielddefn!(layer::AbstractFeatureLayer, field::AbstractFieldDefn,
    +    approx = false)

    Create a new field on a layer.

    Parameters

    • layer: the layer to write the field definition.
    • field: the field definition to write to disk.
    • approx: If true, the field may be created in a slightly different form depending on the limitations of the format driver.

    Remarks

    You must use this to create new fields on a real layer. Internally the OGRFeatureDefn for the layer will be updated to reflect the new field. Applications should never modify the OGRFeatureDefn used by a layer directly.

    This function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.

    Not all drivers support this function. You can query a layer to check if it supports it with the GDAL.OLCCreateField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.

    Drivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.

    source
    ArchGDAL.addgeomdefn!Method
    addgeomdefn!(layer::AbstractFeatureLayer, field::AbstractGeomFieldDefn,
    +    approx = false)

    Create a new geometry field on a layer.

    Parameters

    • layer: the layer to write the field definition.
    • field: the geometry field definition to write to disk.
    • approx: If true, the field may be created in a slightly different form depending on the limitations of the format driver.

    Remarks

    You must use this to create new geometry fields on a real layer. Internally the OGRFeatureDefn for the layer will be updated to reflect the new field. Applications should never modify the OGRFeatureDefn used by a layer directly.

    This function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.

    Not all drivers support this function. You can query a layer to check if it supports it with the GDAL.OLCCreateGeomField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.

    Drivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.

    source
    ArchGDAL.copyMethod
    copy(layer, dataset, name, options)

    Copy an existing layer.

    This method creates a new layer, duplicate the field definitions of the source layer, and then duplicates each feature of the source layer.

    Parameters

    • layer: source layer to be copied.

    Keyword Arguments

    • dataset: the dataset handle. (Creates a new dataset in memory by default.)
    • name: the name of the layer to create on the dataset.
    • options: a StringList of name=value (driver-specific) options.
    source
    ArchGDAL.createlayerMethod
    createlayer(name, dataset, geom, spatialref, options)

    This function attempts to create a new layer on the dataset with the indicated name, spatialref, and geometry type.

    Keyword Arguments

    • name: the name for the new layer. This should ideally not match any existing layer on the datasource. Defaults to an empty string.
    • dataset: the dataset. Defaults to creating a new in memory dataset.
    • geom: the geometry type for the layer. Use wkbUnknown (default) if there are no constraints on the types geometry to be written.
    • spatialref: the coordinate system to use for the new layer.
    • options: a StringList of name=value (driver-specific) options.
    source
    ArchGDAL.deletefeature!Method
    deletefeature!(layer::AbstractFeatureLayer, i::Integer)

    Delete feature with fid i from layer.

    Remarks

    The feature with the indicated feature id is deleted from the layer if supported by the driver. Most drivers do not support feature deletion, and will return OGRERRUNSUPPORTEDOPERATION. The OGRLTestCapability() function may be called with OLCDeleteFeature to check if the driver supports feature deletion.

    source
    ArchGDAL.dereferenceMethod
    dereference(layer::AbstractFeatureLayer)

    Decrement layer reference count.

    Returns

    The reference count after decrementing.

    source
    ArchGDAL.envelopeFunction
    envelope(layer::AbstractFeatureLayer, force::Bool = false)
    +envelope(layer::AbstractFeatureLayer, i::Integer, force::Bool = false)

    Fetch the extent of this layer.

    Returns the extent (MBR) of the data in the layer. If force is false, and it would be expensive to establish the extent then OGRERR_FAILURE will be returned indicating that the extent isn't know. If force is true then some implementations will actually scan the entire layer once to compute the MBR of all the features in the layer.

    Parameters

    • layer: handle to the layer from which to get extent.
    • i: (optional) the index of the geometry field to compute the extent.
    • force: Flag indicating whether the extent should be computed even if it is expensive.

    Additional Remarks

    Depending on the drivers, the returned extent may or may not take the spatial filter into account. So it is safer to call GetExtent() without setting a spatial filter.

    Layers without any geometry may return OGRERR_FAILURE just indicating that no meaningful extents could be collected.

    Note that some implementations of this method may alter the read cursor of the layer.

    source
    ArchGDAL.fidcolumnnameMethod
    fidcolumnname(layer::AbstractFeatureLayer)

    The name of the FID column in the database, or "" if not supported.

    source
    ArchGDAL.findfieldindexMethod
    findfieldindex(layer::AbstractFeatureLayer,
    +    field::Union{AbstractString, Symbol}, exactmatch::Bool)

    Find the index of the field in a layer, or -1 if the field doesn't exist.

    If exactmatch is set to false and the field doesn't exists in the given form the driver might apply some changes to make it match, like those it might do if the layer was created (eg. like LAUNDER in the OCI driver).

    source
    ArchGDAL.geomcolumnnameMethod
    geomcolumnname(layer::AbstractFeatureLayer)

    The name of the geometry column in the database, or "" if not supported.

    source
    ArchGDAL.getspatialrefMethod
    getspatialref(layer::AbstractFeatureLayer)

    Returns a clone of the spatial reference system for this layer.

    source
    ArchGDAL.layerdefnMethod
    layerdefn(layer::AbstractFeatureLayer)

    Returns a view of the schema information for this layer.

    Remarks

    The featuredefn is owned by the layer and should not be modified.

    source
    ArchGDAL.nfeatureFunction
    nfeature(layer::AbstractFeatureLayer, force::Bool = false)

    Fetch the feature count in this layer, or -1 if the count is not known.

    Parameters

    • layer: handle to the layer that owned the features.
    • force: flag indicating whether the count should be computed even if it is expensive. (false by default.)
    source
    ArchGDAL.nfieldMethod
    nfield(layer::AbstractFeatureLayer)

    Fetch number of fields on the feature layer.

    source
    ArchGDAL.ngeomMethod
    ngeom(layer::AbstractFeatureLayer)

    Fetch number of geometry fields on the feature layer.

    source
    ArchGDAL.nreferenceMethod
    nreference(layer::AbstractFeatureLayer)

    The current reference count for the layer object itself.

    source
    ArchGDAL.referenceMethod
    reference(layer::AbstractFeatureLayer)

    Increment layer reference count.

    Returns

    The reference count after incrementing.

    source
    ArchGDAL.resetreading!Method
    resetreading!(layer::AbstractFeatureLayer)

    Reset feature reading to start on the first feature.

    This affects nextfeature().

    source
    ArchGDAL.setattributefilter!Method
    setattributefilter!(layer::AbstractFeatureLayer, query::AbstractString)

    Set a new attribute query.

    This method sets the attribute query string to be used when fetching features via the nextfeature() method. Only features for which the query evaluates as true will be returned.

    Parameters

    • layer: handle to the layer on which attribute query will be executed.
    • query: query in restricted SQL WHERE format.

    Remarks

    The query string should be in the format of an SQL WHERE clause. For instance "population > 1000000 and population < 5000000" where population is an attribute in the layer. The query format is normally a restricted form of SQL WHERE clause as described in the "WHERE" section of the OGR SQL tutorial. In some cases (RDBMS backed drivers) the native capabilities of the database may be used to interpret the WHERE clause in which case the capabilities will be broader than those of OGR SQL.

    Note that installing a query string will generally result in resetting the current reading position (ala resetreading!()).

    source
    ArchGDAL.setfeature!Method
    setfeature!(layer::AbstractFeatureLayer, feature::AbstractFeature)

    Rewrite an existing feature.

    This function will write a feature to the layer, based on the feature id within the OGRFeature.

    Remarks

    Use OGRLTestCapability(OLCRandomWrite) to establish if this layer supports random access writing via OGRLSetFeature().

    source
    ArchGDAL.setignoredfields!Method
    setignoredfields!(layer::AbstractFeatureLayer, fieldnames)

    Set which fields can be omitted when retrieving features from the layer.

    Parameters

    • fieldnames: an array of field names terminated by NULL item. If NULL is

    passed, the ignored list is cleared.

    Remarks

    If the driver supports this functionality (testable using OLCIgnoreFields capability), it will not fetch the specified fields in subsequent calls to GetFeature()/nextfeature() and thus save some processing time and/or bandwidth.

    Besides field names of the layers, the following special fields can be passed: "OGR_GEOMETRY" to ignore geometry and "OGR_STYLE" to ignore layer style.

    By default, no fields are ignored.

    source
    ArchGDAL.setnextbyindex!Method
    setnextbyindex!(layer::AbstractFeatureLayer, i::Integer)

    Move read cursor to the i-th feature in the current resultset.

    This method allows positioning of a layer such that the nextfeature() call will read the requested feature, where i is an absolute index into the current result set. So, setting it to 3 would mean the next feature read with nextfeature() would have been the fourth feature to have been read if sequential reading took place from the beginning of the layer, including accounting for spatial and attribute filters.

    Parameters

    • layer: handle to the layer
    • i: the index indicating how many steps into the result set to seek.

    Remarks

    Only in rare circumstances is setnextbyindex!() efficiently implemented. In all other cases the default implementation which calls resetreading!() and then calls nextfeature() i times is used. To determine if fast seeking is available on the layer, use the testcapability() method with a value of OLCFastSetNextByIndex.

    source
    ArchGDAL.setspatialfilter!Method
    setspatialfilter!(layer::AbstractFeatureLayer, geom::AbstractGeometry)

    Set a new spatial filter for the layer, using the geom.

    This method set the geometry to be used as a spatial filter when fetching features via the nextfeature() method. Only features that geometrically intersect the filter geometry will be returned.

    Parameters

    • layer handle to the layer on which to set the spatial filter.
    • geom handle to the geometry to use as a filtering region. NULL may be passed indicating that the current spatial filter should be cleared, but no new one instituted.

    Remarks

    Currently this test may be inaccurately implemented, but it is guaranteed that all features whose envelope (as returned by OGRGeometry::getEnvelope()) overlaps the envelope of the spatial filter will be returned. This can result in more shapes being returned that should strictly be the case.

    For the time being the passed filter geometry should be in the same SRS as the geometry field definition it corresponds to (as returned by GetLayerDefn()->OGRFeatureDefn::GetGeomFieldDefn(i)->GetSpatialRef()). In the future this may be generalized.

    Note that only the last spatial filter set is applied, even if several successive calls are done with different iGeomField values.

    source
    ArchGDAL.setspatialfilter!Method
    setspatialfilter!(layer::AbstractFeatureLayer, i::Integer,
    +    geom::AbstractGeometry)

    Set a new spatial filter.

    This method set the geometry to be used as a spatial filter when fetching features via the nextfeature() method. Only features that geometrically intersect the filter geometry will be returned.

    Parameters

    • layer: the layer on which to set the spatial filter.
    • i: index of the geometry field on which the spatial filter operates.
    • geom: the geometry to use as a filtering region. NULL may be passed indicating that the current spatial filter should be cleared, but no new one instituted.

    Remarks

    Currently this test is may be inaccurately implemented, but it is guaranteed that all features who's envelope (as returned by OGRGeometry::getEnvelope()) overlaps the envelope of the spatial filter will be returned. This can result in more shapes being returned that should strictly be the case.

    For the time being the passed filter geometry should be in the same SRS as the layer (as returned by OGRLayer::GetSpatialRef()). In the future this may be generalized.

    source
    ArchGDAL.setspatialfilter!Method
    setspatialfilter!(layer::AbstractFeatureLayer, i::Integer, xmin, ymin, xmax,
    +    ymax)

    Set a new rectangular spatial filter.

    Parameters

    • layer: the feature layer on which to set the spatial filter.
    • i: index of the geometry field on which the spatial filter operates.
    • xmin: the minimum X coordinate for the rectangular region.
    • ymin: the minimum Y coordinate for the rectangular region.
    • xmax: the maximum X coordinate for the rectangular region.
    • ymax: the maximum Y coordinate for the rectangular region.
    source
    ArchGDAL.setspatialfilter!Method
    setspatialfilter!(layer::AbstractFeatureLayer, xmin, ymin, xmax, ymax)

    Set a new rectangular spatial filter for the layer.

    This method set rectangle to be used as a spatial filter when fetching features via the nextfeature() method. Only features that geometrically intersect the given rectangle will be returned.

    The x/y values should be in the same coordinate system as the layer as a whole (as returned by OGRLayer::GetSpatialRef()). Internally this method is normally implemented as creating a 5 vertex closed rectangular polygon and passing it to OGRLayer::SetSpatialFilter(). It exists as a convenience.

    The only way to clear a spatial filter set with this method is to call OGRLayer::SetSpatialFilter(NULL).

    source
    ArchGDAL.testcapabilityMethod
    testcapability(layer::AbstractFeatureLayer, capability::AbstractString)

    Test if this layer supported the named capability.

    Parameters

    • capability the name of the capability to test.

    Returns

    true if the layer has the requested capability, false otherwise. It will return false for any unrecognized capabilities.

    Additional Remarks

    The capability codes that can be tested are represented as strings, but #defined constants exists to ensure correct spelling. Specific layer types may implement class specific capabilities, but this can't generally be discovered by the caller.

    • OLCRandomRead / "RandomRead": true if the GetFeature() method is implemented in an optimized way for this layer, as opposed to the default implementation using resetreading!() and nextfeature() to find the requested feature id.

    • OLCSequentialWrite / "SequentialWrite": true if the CreateFeature() method works for this layer. Note this means that this particular layer is writable. The same OGRLayer class may returned false for other layer instances that are effectively read-only.

    • OLCRandomWrite / "RandomWrite": true if the SetFeature() method is operational on this layer. Note this means that this particular layer is writable. The same OGRLayer class may returned false for other layer instances that are effectively read-only.

    • OLCFastSpatialFilter / "FastSpatialFilter": true if this layer implements spatial filtering efficiently. Layers that effectively read all features, and test them with the OGRFeature intersection methods should return false. This can be used as a clue by the application whether it should build and maintain its own spatial index for features in this layer.

    • OLCFastFeatureCount / "FastFeatureCount": true if this layer can return a feature count (via GetFeatureCount()) efficiently. i.e. without counting the features. In some cases this will return true until a spatial filter is installed after which it will return false.

    • OLCFastGetExtent / "FastGetExtent": true if this layer can return its data extent (via GetExtent()) efficiently, i.e. without scanning all the features. In some cases this will return true until a spatial filter is installed after which it will return false.

    • OLCFastSetNextByIndex / "FastSetNextByIndex": true if this layer can perform the SetNextByIndex() call efficiently, otherwise false.

    • OLCCreateField / "CreateField": true if this layer can create new fields on the current layer using CreateField(), otherwise false.

    • OLCCreateGeomField / "CreateGeomField": (GDAL >= 1.11) true if this layer can create new geometry fields on the current layer using CreateGeomField(), otherwise false.

    • OLCDeleteField / "DeleteField": true if this layer can delete existing fields on the current layer using DeleteField(), otherwise false.

    • OLCReorderFields / "ReorderFields": true if this layer can reorder existing fields on the current layer using ReorderField() or ReorderFields(), otherwise false.

    • OLCAlterFieldDefn / "AlterFieldDefn": true if this layer can alter the definition of an existing field on the current layer using AlterFieldDefn(), otherwise false.

    • OLCDeleteFeature / "DeleteFeature": true if the DeleteFeature() method is supported on this layer, otherwise false.

    • OLCStringsAsUTF8 / "StringsAsUTF8": true if values of OFTString fields are assured to be in UTF-8 format. If false the encoding of fields is uncertain, though it might still be UTF-8.

    • OLCTransactions / "Transactions": true if the StartTransaction(), CommitTransaction() and RollbackTransaction() methods work in a meaningful way, otherwise false.

    • OLCIgnoreFields / "IgnoreFields": true if fields, geometry and style will be omitted when fetching features as set by SetIgnoredFields() method.

    • OLCCurveGeometries / "CurveGeometries": true if this layer supports writing curve geometries or may return such geometries. (GDAL 2.0).

    source
    ArchGDAL.unsafe_createfeatureMethod
    unsafe_createfeature(layer::AbstractFeatureLayer)

    Create and returns a new feature based on the layer definition.

    The newly feature is owned by the layer (it will increase the number of features the layer by one), but the feature has not been written to the layer yet.

    source
    ArchGDAL.unsafe_getfeatureMethod
    unsafe_getfeature(layer::AbstractFeatureLayer, i::Integer)

    Return a feature (now owned by the caller) by its identifier or NULL on failure.

    Parameters

    • layer: the feature layer to be read from.
    • i: the index of the feature to be returned.

    Remarks

    This function will attempt to read the identified feature. The nFID value cannot be OGRNullFID. Success or failure of this operation is unaffected by the spatial or attribute filters (and specialized implementations in drivers should make sure that they do not take into account spatial or attribute filters).

    If this function returns a non-NULL feature, it is guaranteed that its feature id (OGRFGetFID()) will be the same as nFID.

    Use OGRLTestCapability(OLCRandomRead) to establish if this layer supports efficient random access reading via OGRLGetFeature(); however, the call should always work if the feature exists as a fallback implementation just scans all the features in the layer looking for the desired feature.

    Sequential reads (with OGRLGetNextFeature()) are generally considered interrupted by a OGRLGetFeature() call.

    The returned feature is now owned by the caller, and should be freed with destroy().

    source
    ArchGDAL.unsafe_nextfeatureMethod
    unsafe_nextfeature(layer::AbstractFeatureLayer)

    Fetch the next available feature from this layer.

    Parameters

    • layer: the feature layer to be read from.

    Remarks

    This method implements sequential access to the features of a layer. The resetreading!() method can be used to start at the beginning again. Only features matching the current spatial filter (set with setspatialfilter!()) will be returned.

    The returned feature becomes the responsibility of the caller to delete with destroy(). It is critical that all features associated with a FeatureLayer (more specifically a FeatureDefn) be destroyed before that layer is destroyed.

    Features returned by nextfeature() may or may not be affected by concurrent modifications depending on drivers. A guaranteed way of seeing modifications in effect is to call resetreading!() on layers where nextfeature() has been called, before reading again. Structural changes in layers (field addition, deletion, ...) when a read is in progress may or may not be possible depending on drivers. If a transaction is committed/aborted, the current sequential reading may or may not be valid after that operation and a call to resetreading!() might be needed.

    source
    ArchGDAL.getdefaultMethod
    getdefault(fielddefn::AbstractFieldDefn)

    Get default field value

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    ArchGDAL.getfieldtypeMethod
    getfieldtype(fielddefn::AbstractFieldDefn)

    Returns the type or subtype (if any) of this field.

    Parameters

    • fielddefn: handle to the field definition.

    Returns

    The field type or subtype.

    References

    • https://gdal.org/development/rfc/rfc50ogrfield_subtype.html
    source
    ArchGDAL.getjustifyMethod
    getjustify(fielddefn::AbstractFieldDefn)

    Get the justification for this field.

    Note: no driver is know to use the concept of field justification.

    source
    ArchGDAL.getprecisionMethod
    getprecision(fielddefn::AbstractFieldDefn)

    Get the formatting precision for this field.

    This should normally be zero for fields of types other than OFTReal.

    source
    ArchGDAL.getspatialrefMethod
    getspatialref(geomdefn::AbstractGeomFieldDefn)

    Returns a clone of the spatial reference system for this field. May be NULL.

    source
    ArchGDAL.getsubtypeMethod
    getsubtype(fielddefn::AbstractFieldDefn)

    Fetch subtype of this field.

    Parameters

    • fielddefn: handle to the field definition to get subtype from.

    Returns

    field subtype.

    source
    ArchGDAL.getwidthMethod
    getwidth(fielddefn::AbstractFieldDefn)

    Get the formatting width for this field.

    Returns

    the width, zero means no specified width.

    source
    ArchGDAL.isdefaultdriverspecificMethod
    isdefaultdriverspecific(fielddefn::AbstractFieldDefn)

    Returns whether the default value is driver specific.

    Driver specific default values are those that are not NULL, a numeric value, a literal value enclosed between single quote characters, CURRENTTIMESTAMP, CURRENTTIME, CURRENT_DATE or datetime literal value.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    ArchGDAL.isignoredMethod
    isignored(fielddefn::AbstractFieldDefn)

    Return whether this field should be omitted when fetching features.

    source
    ArchGDAL.isignoredMethod
    isignored(geomdefn::AbstractGeomFieldDefn)

    Return whether this field should be omitted when fetching features.

    source
    ArchGDAL.isnullableMethod
    isnullable(fielddefn::AbstractFieldDefn)

    Return whether this field can receive null values.

    By default, fields are nullable.

    Even if this method returns false (i.e not-nullable field), it doesn't mean that OGRFeature::IsFieldSet() will necessarily return true, as fields can be temporarily unset and null/not-null validation is usually done when OGRLayer::CreateFeature()/SetFeature() is called.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    ArchGDAL.isnullableMethod
    isnullable(geomdefn::AbstractGeomFieldDefn)

    Return whether this geometry field can receive null values.

    By default, fields are nullable.

    Even if this method returns false (i.e not-nullable field), it doesn't mean that OGRFeature::IsFieldSet() will necessary return true, as fields can be temporarily unset and null/not-null validation is usually done when OGRLayer::CreateFeature()/SetFeature() is called.

    Note that not-nullable geometry fields might also contain 'empty' geometries.

    source
    ArchGDAL.setdefault!Method
    setdefault!(fielddefn::AbstractFieldDefn, default)

    Set default field value.

    The default field value is taken into account by drivers (generally those with a SQL interface) that support it at field creation time. OGR will generally not automatically set the default field value to null fields by itself when calling OGRFeature::CreateFeature() / OGRFeature::SetFeature(), but will let the low-level layers to do the job. So retrieving the feature from the layer is recommended.

    The accepted values are NULL, a numeric value, a literal value enclosed between single quote characters (and inner single quote characters escaped by repetition of the single quote character), CURRENTTIMESTAMP, CURRENTTIME, CURRENT_DATE or a driver specific expression (that might be ignored by other drivers). For a datetime literal value, format should be 'YYYY/MM/DD HH:MM:SS[.sss]' (considered as UTC time).

    Drivers that support writing DEFAULT clauses will advertize the GDALDCAPDEFAULT_FIELDS driver metadata item.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    ArchGDAL.setignored!Method
    setignored!(fielddefn::FieldDefn, ignore::Bool)

    Set whether this field should be omitted when fetching features.

    source
    ArchGDAL.setignored!Method
    setignored!(geomdefn::GeomFieldDefn, ignore::Bool)

    Set whether this field should be omitted when fetching features.

    source
    ArchGDAL.setjustify!Method
    setjustify!(fielddefn::FieldDefn, ejustify::OGRJustification)

    Set the justification for this field.

    Note: no driver is know to use the concept of field justification.

    source
    ArchGDAL.setnullable!Method
    setnullable!(geomdefn::GeomFieldDefn, nullable::Bool)

    Set whether this geometry field can receive null values.

    By default, fields are nullable, so this method is generally called with false to set a not-null constraint.

    Drivers that support writing not-null constraint will advertize the GDALDCAPNOTNULL_GEOMFIELDS driver metadata item.

    source
    ArchGDAL.setnullable!Method
    setnullable!(fielddefn::FieldDefn, nullable::Bool)

    Set whether this field can receive null values.

    By default, fields are nullable, so this method is generally called with false to set a not-null constraint.

    Drivers that support writing not-null constraint will advertize the GDALDCAPNOTNULL_FIELDS driver metadata item.

    References

    • https://gdal.org/development/rfc/rfc53ogrnotnull_default.html
    source
    ArchGDAL.setparams!Method
    setparams!(fielddefn, name, etype, [nwidth, [nprecision, [justify]]])

    Set defining parameters for a field in one call.

    Parameters

    • fielddefn: the field definition to set to.
    • name: the new name to assign.
    • etype: the new type (one of the OFT values like OFTInteger).
    • nwidth: the preferred formatting width. 0 (default) indicates undefined.
    • nprecision: number of decimals for formatting. 0 (default) for undefined.
    • justify: the formatting justification ([OJUndefined], OJLeft or OJRight)
    source
    ArchGDAL.setprecision!Method
    setprecision!(fielddefn::FieldDefn, precision::Integer)

    Set the formatting precision for this field in characters.

    This should normally be zero for fields of types other than OFTReal.

    source
    ArchGDAL.setspatialref!Method
    setspatialref!(geomdefn::GeomFieldDefn, spatialref::AbstractSpatialRef)

    Set the spatial reference of this field.

    This function drops the reference of the previously set SRS object and acquires a new reference on the passed object (if non-NULL).

    source
    ArchGDAL.setsubtype!Method
    setsubtype!(fielddefn::FieldDefn, subtype::OGRFieldSubType)

    Set the subtype of this field.

    This should never be done to an OGRFieldDefn that is already part of an OGRFeatureDefn.

    Parameters

    • fielddefn: handle to the field definition to set type to.
    • subtype: the new field subtype.

    References

    • https://gdal.org/development/rfc/rfc50ogrfield_subtype.html
    source
    ArchGDAL.setwidth!Method
    setwidth!(fielddefn::FieldDefn, width::Integer)

    Set the formatting width for this field in characters.

    This should never be done to an OGRFieldDefn that is already part of an OGRFeatureDefn.

    source
    ArchGDAL.unsafe_createfielddefnMethod
    unsafe_createfielddefn(name::AbstractString, etype::OGRFieldType)

    Create a new field definition.

    By default, fields have no width, precision, are nullable and not ignored.

    source
    ArchGDAL.addgeom!Method
    addgeom!(geomcontainer::AbstractGeometry, subgeom::AbstractGeometry)

    Add a geometry to a geometry container.

    Some subclasses of OGRGeometryCollection restrict the types of geometry that can be added, and may return an error. The passed geometry is cloned to make an internal copy.

    For a polygon, subgeom must be a linearring. If the polygon is empty, the first added subgeometry will be the exterior ring. The next ones will be the interior rings.

    Parameters

    • geomcontainer: existing geometry.
    • subgeom: geometry to add to the existing geometry.
    source
    ArchGDAL.addpoint!Function
    addpoint!(geom::AbstractGeometry, x, y)
    +addpoint!(geom::AbstractGeometry, x, y, z)

    Add a point to a geometry (line string or point).

    Parameters

    • geom: the geometry to add a point to.
    • x: x coordinate of point to add.
    • y: y coordinate of point to add.
    • z: z coordinate of point to add.
    source
    ArchGDAL.boundaryMethod
    boundary(geom::AbstractGeometry)

    Returns the boundary of the geometry.

    A new geometry object is created and returned containing the boundary of the geometry on which the method is invoked.

    source
    ArchGDAL.boundingboxMethod
    boundingbox(geom::AbstractGeometry)

    Returns a bounding box polygon (CW) built from envelope coordinates

    source
    ArchGDAL.bufferFunction
    buffer(geom::AbstractGeometry, dist::Real, quadsegs::Integer = 30)

    Compute buffer of geometry.

    Builds a new geometry containing the buffer region around the geometry on which it is invoked. The buffer is a polygon containing the region within the buffer distance of the original geometry.

    Some buffer sections are properly described as curves, but are converted to approximate polygons. The nQuadSegs parameter can be used to control how many segments should be used to define a 90 degree curve - a quadrant of a circle. A value of 30 is a reasonable default. Large values result in large numbers of vertices in the resulting buffer geometry while small numbers reduce the accuracy of the result.

    Parameters

    • geom: the geometry.
    • dist: the buffer distance to be applied. Should be expressed into the same unit as the coordinates of the geometry.
    • quadsegs: the number of segments used to approximate a 90 degree (quadrant) of curvature.
    source
    ArchGDAL.centroid!Method
    centroid!(geom::AbstractGeometry, centroid::AbstractGeometry)

    Compute the geometry centroid.

    The centroid location is applied to the passed in OGRPoint object. The centroid is not necessarily within the geometry.

    This method relates to the SFCOM ISurface::get_Centroid() method however the current implementation based on GEOS can operate on other geometry types such as multipoint, linestring, geometrycollection such as multipolygons. OGC SF SQL 1.1 defines the operation for surfaces (polygons). SQL/MM-Part 3 defines the operation for surfaces and multisurfaces (multipolygons).

    source
    ArchGDAL.centroidMethod
    centroid(geom::AbstractGeometry)

    Compute the geometry centroid.

    The centroid is not necessarily within the geometry.

    (This method relates to the SFCOM ISurface::get_Centroid() method however the current implementation based on GEOS can operate on other geometry types such as multipoint, linestring, geometrycollection such as multipolygons. OGC SF SQL 1.1 defines the operation for surfaces (polygons). SQL/MM-Part 3 defines the operation for surfaces and multisurfaces (multipolygons).)

    source
    ArchGDAL.cloneMethod
    clone(geom::AbstractGeometry)

    Returns a copy of the geometry with the original spatial reference system.

    source
    ArchGDAL.closerings!Method
    closerings!(geom::AbstractGeometry)

    Force rings to be closed.

    If this geometry, or any contained geometries has polygon rings that are not closed, they will be closed by adding the starting point at the end.

    source
    ArchGDAL.containsMethod
    contains(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if g1 contains g2.

    source
    ArchGDAL.convexhullMethod
    convexhull(geom::AbstractGeometry)

    Returns the convex hull of the geometry.

    A new geometry object is created and returned containing the convex hull of the geometry on which the method is invoked.

    source
    ArchGDAL.creategeomMethod
    creategeom(geomtype::OGRwkbGeometryType)

    Create an empty geometry of desired type.

    This is equivalent to allocating the desired geometry with new, but the allocation is guaranteed to take place in the context of the GDAL/OGR heap.

    source
    ArchGDAL.crossesMethod
    crosses(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if the geometries are crossing.

    source
    ArchGDAL.curvegeomMethod
    curvegeom(geom::AbstractGeometry)

    Return curve version of this geometry.

    Returns a geometry that has possibly CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON, MULTICURVE or MULTISURFACE in it, by de-approximating linear into curve geometries.

    If the geometry has no curve portion, the returned geometry will be a clone.

    The reverse function is OGRGGetLinearGeometry().

    source
    ArchGDAL.delaunaytriangulationMethod
    delaunaytriangulation(geom::AbstractGeometry, tol::Real, onlyedges::Bool)

    Return a Delaunay triangulation of the vertices of the geometry.

    Parameters

    • geom: the geometry.
    • tol: optional snapping tolerance to use for improved robustness
    • onlyedges: if true, will return a MULTILINESTRING, otherwise it will return a GEOMETRYCOLLECTION containing triangular POLYGONs.
    source
    ArchGDAL.destroyMethod

    Destroy geometry object.

    Equivalent to invoking delete on a geometry, but it guaranteed to take place within the context of the GDAL/OGR heap.

    source
    ArchGDAL.destroyMethod

    Destroy prepared geometry object.

    Equivalent to invoking delete on a prepared geometry, but it guaranteed to take place within the context of the GDAL/OGR heap.

    source
    ArchGDAL.differenceMethod
    difference(g1::AbstractGeometry, g2::AbstractGeometry)

    Generates a new geometry which is the region of this geometry with the region of the other geometry removed.

    Returns

    A new geometry representing the difference of the geometries, or NULL if the difference is empty.

    source
    ArchGDAL.disjointMethod
    disjoint(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if the geometries are disjoint.

    source
    ArchGDAL.distanceMethod
    distance(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns the distance between the geometries or -1 if an error occurs.

    source
    ArchGDAL.empty!Method
    empty!(geom::AbstractGeometry)

    Clear geometry information.

    This restores the geometry to its initial state after construction, and before assignment of actual geometry.

    source
    ArchGDAL.envelopeMethod
    envelope(geom::AbstractGeometry)

    Computes and returns the bounding envelope for this geometry.

    source
    ArchGDAL.envelope3dMethod
    envelope3d(geom::AbstractGeometry)

    Computes and returns the bounding envelope (3D) for this geometry

    source
    ArchGDAL.equalsMethod
    equals(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if the geometries are equivalent.

    source
    ArchGDAL.flattento2d!Method
    flattento2d!(geom::AbstractGeometry)

    Convert geometry to strictly 2D.

    The return value will have a new type, do not continue using the original object.

    source
    ArchGDAL.forcetoFunction
    forceto(geom::AbstractGeometry, targettype::OGRwkbGeometryType, [options])

    Tries to force the provided geometry to the specified geometry type.

    Parameters

    • geom: the input geometry.
    • targettype: target output geometry type.

    options: (optional) options as a null-terminated vector of strings

    It can promote 'single' geometry type to their corresponding collection type (see OGRGTGetCollection()) or the reverse. non-linear geometry type to their corresponding linear geometry type (see OGRGTGetLinear()), by possibly approximating circular arcs they may contain. Regarding conversion from linear geometry types to curve geometry types, only "wraping" will be done. No attempt to retrieve potential circular arcs by de-approximating stroking will be done. For that, OGRGeometry::getCurveGeometry() can be used.

    The passed in geometry is cloned and a new one returned.

    source
    ArchGDAL.fromGMLMethod
    fromGML(data)

    Create geometry from GML.

    This method translates a fragment of GML containing only the geometry portion into a corresponding OGRGeometry. There are many limitations on the forms of GML geometries supported by this parser, but they are too numerous to list here.

    The following GML2 elements are parsed : Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, MultiGeometry.

    source
    ArchGDAL.fromWKBMethod
    fromWKB(data)

    Create a geometry object of the appropriate type from it's well known binary (WKB) representation.

    Parameters

    • data: pointer to the input BLOB data.
    source
    ArchGDAL.fromWKTMethod
    fromWKT(data::Vector{String})

    Create a geometry object of the appropriate type from its well known text (WKT) representation.

    Parameters

    • data: input zero terminated string containing WKT representation of the geometry to be created. The pointer is updated to point just beyond that last character consumed.
    source
    ArchGDAL.geomareaMethod
    geomarea(geom::AbstractGeometry)

    Returns the area of the geometry or 0.0 for unsupported geometry types.

    source
    ArchGDAL.geomdimMethod
    geomdim(geom::AbstractGeometry)

    Get the dimension of the geometry. 0 for points, 1 for lines and 2 for surfaces.

    This function corresponds to the SFCOM IGeometry::GetDimension() method. It indicates the dimension of the geometry, but does not indicate the dimension of the underlying space (as indicated by OGRGGetCoordinateDimension() function).

    source
    ArchGDAL.geomlengthMethod
    geomlength(geom::AbstractGeometry)

    Returns the length of the geometry, or 0.0 for unsupported geometry types.

    source
    ArchGDAL.getcoorddimMethod
    getcoorddim(geom::AbstractGeometry)

    Get the dimension of the coordinates in this geometry.

    Returns

    This will return 2 or 3.

    source
    ArchGDAL.getgeomMethod
    getgeom(geom::AbstractGeometry, i::Integer)

    Fetch geometry from a geometry container.

    For a polygon, getgeom(polygon,i) returns the exterior ring if i == 0, and the interior rings for i > 0.

    Parameters

    • geom: the geometry container from which to get a geometry from.
    • i: index of the geometry to fetch, between 0 and ngeom() - 1.
    source
    ArchGDAL.getmMethod
    getm(geom::AbstractGeometry, i::Integer)

    Fetch the m coordinate of a point from a geometry, at index i.

    source
    ArchGDAL.getpointMethod
    getpoint(geom::AbstractGeometry, i::Integer)

    Fetch a point in line string or a point geometry, at index i.

    Parameters

    • i: the vertex to fetch, from 0 to ngeom()-1, zero for a point.
    source
    ArchGDAL.getspatialrefMethod
    getspatialref(geom::AbstractGeometry)

    Returns a clone of the spatial reference system for the geometry.

    (The original SRS may be shared with many objects, and should not be modified.)

    source
    ArchGDAL.getxMethod
    getx(geom::AbstractGeometry, i::Integer)

    Fetch the x coordinate of a point from a geometry, at index i.

    source
    ArchGDAL.getyMethod
    gety(geom::AbstractGeometry, i::Integer)

    Fetch the y coordinate of a point from a geometry, at index i.

    source
    ArchGDAL.getzMethod
    getz(geom::AbstractGeometry, i::Integer)

    Fetch the z coordinate of a point from a geometry, at index i.

    source
    ArchGDAL.hascurvegeomMethod
    hascurvegeom(geom::AbstractGeometry, nonlinear::Bool)

    Returns if this geometry is or has curve geometry.

    Parameters

    • geom: the geometry to operate on.
    • nonlinear: set it to true to check if the geometry is or contains a CIRCULARSTRING.
    source
    ArchGDAL.intersectionMethod
    intersection(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns a new geometry representing the intersection of the geometries, or NULL if there is no intersection or an error occurs.

    Generates a new geometry which is the region of intersection of the two geometries operated on. The OGRGIntersects() function can be used to test if two geometries intersect.

    source
    ArchGDAL.intersectsMethod
    intersects(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns whether the geometries intersect

    Determines whether two geometries intersect. If GEOS is enabled, then this is done in rigorous fashion otherwise true is returned if the envelopes (bounding boxes) of the two geometries overlap.

    source
    ArchGDAL.is3dMethod
    is3d(geom::AbstractGeometry)

    Returns true if the geometry has a z coordinate, otherwise false.

    source
    ArchGDAL.isemptyMethod
    isempty(geom::AbstractGeometry)

    Returns true if the geometry has no points, otherwise false.

    source
    ArchGDAL.ismeasuredMethod
    ismeasured(geom::AbstractGeometry)

    Returns true if the geometry has a m coordinate, otherwise false.

    source
    ArchGDAL.isringMethod
    isring(geom::AbstractGeometry)

    Returns true if the geometry is a ring, otherwise false.

    source
    ArchGDAL.issimpleMethod
    issimple(geom::AbstractGeometry)

    Returns true if the geometry is simple, otherwise false.

    source
    ArchGDAL.isvalidMethod
    isvalid(geom::AbstractGeometry)

    Returns true if the geometry is valid, otherwise false.

    source
    ArchGDAL.ngeomMethod
    ngeom(geom::AbstractGeometry)

    The number of elements in a geometry or number of geometries in container.

    This corresponds to

    • OGR_G_GetPointCount for wkbPoint[25D] or wkbLineString[25D],
    • OGR_G_GetGeometryCount for geometries of type wkbPolygon[25D], wkbMultiPoint[25D], wkbMultiLineString[25D], wkbMultiPolygon[25D] or wkbGeometryCollection[25D], and
    • 0 for other geometry types.
    source
    ArchGDAL.overlapsMethod
    overlaps(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if the geometries overlap.

    source
    ArchGDAL.pointalonglineMethod
    pointalongline(geom::AbstractGeometry, distance::Real)

    Fetch point at given distance along curve.

    Parameters

    • geom: curve geometry.
    • distance: distance along the curve at which to sample position. This distance should be between zero and geomlength() for this curve.

    Returns

    a point or NULL.

    source
    ArchGDAL.pointonsurfaceMethod
    pointonsurface(geom::AbstractGeometry)

    Returns a point guaranteed to lie on the surface.

    This method relates to the SFCOM ISurface::get_PointOnSurface() method however the current implementation based on GEOS can operate on other geometry types than the types that are supported by SQL/MM-Part 3 : surfaces (polygons) and multisurfaces (multipolygons).

    source
    ArchGDAL.polygonfromedgesMethod
    polygonfromedges(lines::AbstractGeometry, tol::Real; besteffort = false,
    +    autoclose = false)

    Build a ring from a bunch of arcs.

    Parameters

    • lines: handle to an OGRGeometryCollection (or OGRMultiLineString) containing the line string geometries to be built into rings.
    • tol: whether two arcs are considered close enough to be joined.

    Keyword Arguments

    • besteffort: (defaults to false) not yet implemented???.
    • autoclose: indicates if the ring should be close when first and last points of the ring are the same. (defaults to false)
    source
    ArchGDAL.polygonizeMethod
    polygonize(geom::AbstractGeometry)

    Polygonizes a set of sparse edges.

    A new geometry object is created and returned containing a collection of reassembled Polygons: NULL will be returned if the input collection doesn't correspond to a MultiLinestring, or when reassembling Edges into Polygons is impossible due to topological inconsistencies.

    source
    ArchGDAL.preparegeomMethod
    preparegeom(geom::AbstractGeometry)

    Create an prepared geometry of a geometry. This can speed up operations which interact with the geometry multiple times, by storing caches of calculated geometry information.

    source
    ArchGDAL.removeallgeoms!Method
    removeallgeoms!(geom::AbstractGeometry, todelete::Bool = true)

    Remove all geometries from an exiting geometry container.

    Parameters

    • geom: the existing geometry to delete from.
    • todelete: if true the geometry will be destroyed, otherwise it will not. The default is true as the existing geometry is considered to own the geometries in it.
    source
    ArchGDAL.removegeom!Method
    removegeom!(geom::AbstractGeometry, i::Integer, todelete::Bool = true)

    Remove a geometry from an exiting geometry container.

    Parameters

    • geom: the existing geometry to delete from.
    • i: the index of the geometry to delete. A value of -1 is a special flag meaning that all geometries should be removed.
    • todelete: if true the geometry will be destroyed, otherwise it will not. The default is true as the existing geometry is considered to own the geometries in it.
    source
    ArchGDAL.segmentize!Method
    segmentize!(geom::AbstractGeometry, maxlength::Real)

    Modify the geometry such it has no segment longer than the given distance.

    Interpolated points will have Z and M values (if needed) set to 0. Distance computation is performed in 2d only

    Parameters

    • geom: the geometry to segmentize
    • maxlength: the maximum distance between 2 points after segmentization
    source
    ArchGDAL.setcoorddim!Method
    setcoorddim!(geom::AbstractGeometry, dim::Integer)

    Set the coordinate dimension.

    This method sets the explicit coordinate dimension. Setting the coordinate dimension of a geometry to 2 should zero out any existing Z values. Setting the dimension of a geometry collection, a compound curve, a polygon, etc. will affect the children geometries. This will also remove the M dimension if present before this call.

    source
    ArchGDAL.setnonlineargeomflag!Method
    setnonlineargeomflag!(flag::Bool)

    Set flag to enable/disable returning non-linear geometries in the C API.

    This flag has only an effect on the OGRFGetGeometryRef(), OGRFGetGeomFieldRef(), OGRLGetGeomType(), OGRGFldGetType() and OGRFDGetGeomType() C API methods. It is meant as making it simple for applications using the OGR C API not to have to deal with non-linear geometries, even if such geometries might be returned by drivers. In which case, they will be transformed into their closest linear geometry, by doing linear approximation, with OGRGForceTo().

    Libraries should generally not use that method, since that could interfere with other libraries or applications.

    Parameters

    • flag: true if non-linear geometries might be returned (default value). false to ask for non-linear geometries to be approximated as linear geometries.

    Returns

    a point or NULL.

    source
    ArchGDAL.setpoint!Function
    setpoint!(geom::AbstractGeometry, i::Integer, x, y)
    +setpoint!(geom::AbstractGeometry, i::Integer, x, y, z)

    Set the location of a vertex in a point or linestring geometry.

    Parameters

    • geom: handle to the geometry to add a vertex to.
    • i: the index of the vertex to assign (zero based) or zero for a point.
    • x: input X coordinate to assign.
    • y: input Y coordinate to assign.
    • z: input Z coordinate to assign (defaults to zero).
    source
    ArchGDAL.setpointcount!Method
    setpointcount!(geom::AbstractGeometry, n::Integer)

    Set number of points in a geometry.

    Parameters

    • geom: the geometry.
    • n: the new number of points for geometry.
    source
    ArchGDAL.simplifyMethod
    simplify(geom::AbstractGeometry, tol::Real)

    Compute a simplified geometry.

    Parameters

    • geom: the geometry.
    • tol: the distance tolerance for the simplification.
    source
    ArchGDAL.simplifypreservetopologyMethod
    simplifypreservetopology(geom::AbstractGeometry, tol::Real)

    Simplify the geometry while preserving topology.

    Parameters

    • geom: the geometry.
    • tol: the distance tolerance for the simplification.
    source
    ArchGDAL.symdifferenceMethod
    symdifference(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns a new geometry representing the symmetric difference of the geometries or NULL if the difference is empty or an error occurs.

    source
    ArchGDAL.toISOWKBFunction
    toISOWKB(geom::AbstractGeometry, order::OGRwkbByteOrder = wkbNDR)

    Convert a geometry into SFSQL 1.2 / ISO SQL/MM Part 3 well known binary format.

    Parameters

    • geom: handle on the geometry to convert to a well know binary data from.
    • order: One of wkbXDR or [wkbNDR] indicating MSB or LSB byte order resp.
    source
    ArchGDAL.toISOWKTMethod
    toISOWKT(geom::AbstractGeometry)

    Convert a geometry into SFSQL 1.2 / ISO SQL/MM Part 3 well known text format.

    source
    ArchGDAL.toJSONMethod
    toJSON(geom::AbstractGeometry; kwargs...)

    Convert a geometry into GeoJSON format.

    • The following options are supported :
    • COORDINATE_PRECISION=number: maximum number of figures after decimal separator to write in coordinates.
    • SIGNIFICANT_FIGURES=number: maximum number of significant figures.
    • If COORDINATEPRECISION is defined, SIGNIFICANTFIGURES will be ignored if
    • specified.
    • When none are defined, the default is COORDINATE_PRECISION=15.

    Parameters

    • geom: handle to the geometry.

    Returns

    A GeoJSON fragment or NULL in case of error.

    source
    ArchGDAL.toKMLFunction
    toKML(geom::AbstractGeometry, altitudemode = C_NULL)

    Convert a geometry into KML format.

    source
    ArchGDAL.toWKBFunction
    toWKB(geom::AbstractGeometry, order::OGRwkbByteOrder = wkbNDR)

    Convert a geometry well known binary format.

    Parameters

    • geom: handle on the geometry to convert to a well know binary data from.
    • order: One of wkbXDR or [wkbNDR] indicating MSB or LSB byte order resp.
    source
    ArchGDAL.toWKTMethod
    toWKT(geom::AbstractGeometry)

    Convert a geometry into well known text format.

    source
    ArchGDAL.touchesMethod
    touches(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if the geometries are touching.

    source
    ArchGDAL.transform!Method
    transform!(geom::AbstractGeometry, coordtransform::CoordTransform)

    Apply arbitrary coordinate transformation to geometry.

    Parameters

    • geom: handle on the geometry to apply the transform to.
    • coordtransform: handle on the transformation to apply.
    source
    ArchGDAL.unionMethod
    union(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns a new geometry representing the union of the geometries.

    source
    ArchGDAL.withinMethod
    within(g1::AbstractGeometry, g2::AbstractGeometry)

    Returns true if g1 is contained within g2.

    source
    ArchGDAL.wkbsizeMethod
    wkbsize(geom::AbstractGeometry)

    Returns size (in bytes) of related binary representation.

    source
    ArchGDAL.addpart!Method
    addpart!(stylemanager::StyleManager, styletool::StyleTool)

    Add a part (style tool) to the current style.

    Parameters

    • stylemanager: handle to the style manager.
    • styletool: the style tool defining the part to add.

    Returns

    true on success, false on error.

    source
    ArchGDAL.addstyle!Method
    addstyle!(stylemanager::StyleManager, stylename, stylestring)

    Add a style to the current style table.

    Parameters

    • stylemanager: handle to the style manager.
    • stylename: the name of the style to add.
    • stylestring: (optional) the style string to use, or (if not provided) to use the style stored in the manager.

    Returns

    true on success, false on error.

    source
    ArchGDAL.addstyle!Method
    addstyle!(styletable::StyleTable, stylename, stylestring)

    Add a new style in the table.

    Parameters

    • styletable: handle to the style table.
    • name: the name the style to add.
    • stylestring: the style string to add.

    Returns

    true on success, false on error

    source
    ArchGDAL.asdoubleFunction
    asdouble(styletool::StyleTool, id::Integer, nullflag = Ref{Cint}(0))

    Get Style Tool parameter value as a double.

    Parameters

    • styletool: handle to the style tool.
    • id: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)
    • nullflag: pointer to an integer that will be set to true or false to indicate whether the parameter value is NULL.

    Returns

    the parameter value as a double and sets nullflag.

    source
    ArchGDAL.asintFunction
    asint(styletool::StyleTool, id::Integer, nullflag = Ref{Cint}(0))

    Get Style Tool parameter value as an integer.

    Parameters

    • styletool: handle to the style tool.
    • id: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)
    • nullflag: pointer to an integer that will be set to true or false to indicate whether the parameter value is NULL.

    Returns

    the parameter value as an integer and sets nullflag.

    source
    ArchGDAL.asstringMethod
    asstring(styletool::StyleTool, id::Integer)
    +asstring(styletool::StyleTool, id::Integer, nullflag::Ref{Cint})

    Get Style Tool parameter value as a string.

    Parameters

    • styletool: handle to the style tool.
    • id: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)
    • nullflag: pointer to an integer that will be set to true or false to indicate whether the parameter value is NULL.

    Returns

    the parameter value as a string and sets nullflag.

    source
    ArchGDAL.destroyMethod

    Destroy Style Manager.

    Parameters

    • stylemanager: handle to the style manager to destroy.
    source
    ArchGDAL.destroyMethod

    Destroy Style Table.

    Parameters

    • styletable: handle to the style table to destroy.
    source
    ArchGDAL.findstylestringMethod
    findstylestring(styletable::StyleTable, name::AbstractString)

    Get a style string by name.

    Parameters

    • styletable: handle to the style table.
    • name: the name of the style string to find.

    Returns

    the style string matching the name or NULL if not found or error.

    source
    ArchGDAL.getstylestringMethod
    getstylestring(styletool::StyleTool)

    Get the style string for this Style Tool.

    Parameters

    • styletool: handle to the style tool.

    Returns

    the style string for this style tool or "" if the styletool is invalid.

    source
    ArchGDAL.gettypeMethod
    gettype(styletool::StyleTool)

    Determine type of Style Tool.

    Parameters

    • styletool: handle to the style tool.

    Returns

    the style tool type, one of OGRSTCPen (1), OGRSTCBrush (2), OGRSTCSymbol (3) or OGRSTCLabel (4). Returns OGRSTCNone (0) if the OGRStyleToolH is invalid.

    source
    ArchGDAL.getunitMethod
    getunit(styletool::StyleTool)

    Get Style Tool units.

    Parameters

    • styletool: handle to the style tool.

    Returns

    the style tool units.

    source
    ArchGDAL.initialize!Method
    initialize!(stylemanager::StyleManager, stylestring = C_NULL)

    Initialize style manager from the style string.

    Parameters

    • stylemanager: handle to the style manager.
    • stylestring: the style string to use (can be NULL).

    Returns

    true on success, false on error.

    source
    ArchGDAL.laststyleMethod
    laststyle(styletable::StyleTable)

    Get the style name of the last style string fetched with OGRSTBLGetNextStyle.

    Parameters

    • styletable: handle to the style table.

    Returns

    the Name of the last style string or NULL on error.

    source
    ArchGDAL.loadstyletable!Method
    loadstyletable!(styletable::StyleTable, filename::AbstractString)

    Load a style table from a file.

    Parameters

    • styletable: handle to the style table.
    • filename: the name of the file to load from.

    Returns

    true on success, false on error

    source
    ArchGDAL.nextstyleMethod
    nextstyle(styletable::StyleTable)

    Get the next style string from the table.

    Parameters

    • styletable: handle to the style table.

    Returns

    the next style string or NULL on error.

    source
    ArchGDAL.npartFunction
    npart(stylemanager::StyleManager)
    +npart(stylemanager::StyleManager, stylestring::AbstractString)

    Get the number of parts in a style.

    Parameters

    • stylemanager: handle to the style manager.
    • stylestring: (optional) the style string on which to operate. If NULL then the current style string stored in the style manager is used.

    Returns

    the number of parts (style tools) in the style.

    source
    ArchGDAL.resetreading!Method
    resetreading!(styletable::StyleTable)

    Reset the next style pointer to 0.

    Parameters

    • styletable: handle to the style table.
    source
    ArchGDAL.savestyletableMethod
    savestyletable(styletable::StyleTable, filename::AbstractString)

    Save a style table to a file.

    Parameters

    • styletable: handle to the style table.
    • filename: the name of the file to save to.

    Returns

    true on success, false on error

    source
    ArchGDAL.setparam!Function
    setparam!(styletool::StyleTool, id::Integer, value)

    Set Style Tool parameter value.

    Parameters

    • styletool: handle to the style tool.
    • id: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)
    • value: the new parameter value, can be an Integer, Float64, or AbstactString
    source
    ArchGDAL.setunit!Method
    setunit!(styletool::StyleTool, newunit::OGRSTUnitId, scale::Real)

    Set Style Tool units.

    Parameters

    • styletool: handle to the style tool.
    • newunit: the new unit.
    • scale: ground to paper scale factor.
    source
    ArchGDAL.toRGBAMethod
    toRGBA(styletool::StyleTool, color::AbstractString)

    Return the r,g,b,a components of a color encoded in #RRGGBB[AA] format.

    Parameters

    • styletool: handle to the style tool.
    • pszColor: the color to parse

    Returns

    (R,G,B,A) tuple of Cints.

    source
    ArchGDAL.unsafe_createstylemanagerFunction
    unsafe_createstylemanager(styletable = C_NULL)

    OGRStyleMgr factory.

    Parameters

    • styletable: OGRStyleTable or NULL if not working with a style table.

    Returns

    an handle to the new style manager object.

    source
    ArchGDAL.unsafe_createstyletoolMethod
    unsafe_createstyletool(classid::OGRSTClassId)

    OGRStyleTool factory.

    Parameters

    • classid: subclass of style tool to create. One of OGRSTCPen (1), OGRSTCBrush (2), OGRSTCSymbol (3) or OGRSTCLabel (4).

    Returns

    an handle to the new style tool object or NULL if the creation failed.

    source
    ArchGDAL.unsafe_getpartFunction
    unsafe_getpart(stylemanager::StyleManager, id::Integer,
    +    stylestring = C_NULL)

    Fetch a part (style tool) from the current style.

    Parameters

    • stylemanager: handle to the style manager.
    • id: the part number (0-based index).
    • stylestring: (optional) the style string on which to operate. If not provided, then the current style string stored in the style manager is used.

    Returns

    OGRStyleToolH of the requested part (style tools) or NULL on error.

    source
    ArchGDAL.addfielddefn!Method
    addfielddefn!(layer::AbstractFeatureLayer, name, etype::OGRFieldType;
    +    <keyword arguments>)

    Create a new field on a layer.

    This function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.

    Not all drivers support this function. You can query a layer to check if it supports it with the OLCCreateField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.

    Drivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.

    Parameters

    • layer: the layer to write the field definition.
    • name: name of the field definition to write to disk.
    • etype: type of the field definition to write to disk.

    Keyword arguments

    • nwidth: the preferred formatting width. 0 (default) indicates undefined.
    • nprecision: number of decimals for formatting. 0 (default) for undefined.
    • justify: the formatting justification ([OJUndefined], OJLeft or OJRight)
    • approx: If true (default false), the field may be created in a slightly different form depending on the limitations of the format driver.
    source
    ArchGDAL.writegeomdefn!Method
    writegeomdefn!(layer::AbstractFeatureLayer, name, etype::OGRwkbGeometryType,
    +    approx=false)

    Write a new geometry field on a layer.

    This function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.

    Not all drivers support this function. You can query a layer to check if it supports it with the OLCCreateField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.

    Drivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.

    Parameters

    • layer: the layer to write the field definition.
    • name: name of the field definition to write to disk.
    • etype: type of the geometry field defintion to write to disk.

    Keyword arguments

    • approx: If true (default false), the geometry field may be created in a slightly different form depending on the limitations of the driver.
    source

    Tables Interface

    Raster Data

    ArchGDAL.RasterDatasetType
    RasterDataset(dataset::AbstractDataset)

    This data structure is returned by the ArchGDAL.readraster function and is a wrapper for a GDAL dataset. This wrapper is to signal the user that the dataset should be treated as a 3D AbstractArray where the first two dimensions correspond to longitude and latitude and the third dimension corresponds to different raster bands.

    As it is a wrapper around a GDAL Dataset, it supports the usual raster methods for a GDAL Dataset such as getgeotransform, nraster, getband, getproj, width, and height. As it is also a subtype of AbstractDiskArray{T,3}, it supports the following additional methods: readblock!, writeblock!, eachchunk, haschunks, etc. This satisfies the DiskArray interface, allowing us to be able to index into it like we would an array.

    Constructing a RasterDataset will error if the raster bands do not have all the same size and a common element data type.

    source
    ArchGDAL._common_sizeMethod
    _common_size(ds::AbstractDataset)

    Determines the size of the raster bands in a dataset and errors if the sizes are not unique.

    source
    ArchGDAL.readrasterMethod
    readraster(s::String; kwargs...)

    Opens a GDAL raster dataset. The difference to ArchGDAL.read is that this function returns a RasterDataset, which is a subtype of AbstractDiskArray{T,3}, so that users can operate on the array using direct indexing.

    source
    ArchGDAL.getcolorentryasrgbMethod
    getcolorentryasrgb(ct::ColorTable, i::Integer)

    Fetch a table entry in RGB format.

    In theory this method should support translation of color palettes in non-RGB color spaces into RGB on the fly, but currently it only works on RGB color tables.

    Parameters

    • i entry offset from zero to GetColorEntryCount()-1.

    Returns

    true on success, or false if the conversion isn't supported.

    source
    ArchGDAL.paletteinterpMethod
    paletteinterp(ct::ColorTable)

    Fetch palette interpretation.

    Returns

    palette interpretation enumeration value, usually GPI_RGB.

    source
    ArchGDAL.setcolorentry!Method
    setcolorentry!(ct::ColorTable, i::Integer, entry::GDAL.GDALColorEntry)

    Set entry in color table.

    Note that the passed in color entry is copied, and no internal reference to it is maintained. Also, the passed in entry must match the color interpretation of the table to which it is being assigned.

    The table is grown as needed to hold the supplied offset.

    Parameters

    • i entry offset from 0 to ncolorentry()-1.
    • entry value to assign to table.
    source
    ArchGDAL.asdoubleMethod
    asdouble(rat::RasterAttrTable, row::Integer, col::Integer)

    Fetch field value as a double.

    The value of the requested column in the requested row is returned as a double. Non double fields will be converted to double with the possibility of data loss.

    Parameters

    • row row to fetch (zero based).
    • col column to fetch (zero based).
    source
    ArchGDAL.asintMethod
    asint(rat::RasterAttrTable, row::Integer, col::Integer)

    Fetch field value as a integer.

    The value of the requested column in the requested row is returned as an int. Non-integer fields will be converted to int with the possibility of data loss.

    Parameters

    • row row to fetch (zero based).
    • col column to fetch (zero based).
    source
    ArchGDAL.asstringMethod
    asstring(rat::RasterAttrTable, row::Integer, col::Integer)

    Fetch field value as a string.

    The value of the requested column in the requested row is returned as a string. If the field is numeric, it is formatted as a string using default rules, so some precision may be lost.

    Parameters

    • row row to fetch (zero based).
    • col column to fetch (zero based).
    source
    ArchGDAL.attributeio!Function
    attributeio!(rat::RasterAttrTable, access::GDALRWFlag, col, startrow, nrows,
    +    data::Vector)

    Read or Write a block of data to/from the Attribute Table.

    Parameters

    • access Either GF_Read or GF_Write
    • col Column of the Attribute Table
    • startrow Row to start reading/writing (zero based)
    • nrows Number of rows to read or write
    • data Vector of Float64, Int32 or AbstractString to read/write. Should be at least nrows long.
    source
    ArchGDAL.changesarewrittentofileMethod
    changesarewrittentofile(rat::RasterAttrTable)

    Determine whether changes made to this RAT are reflected directly in the dataset

    If this returns false then RasterBand.SetDefaultRAT() should be called. Otherwise this is unnecessary since changes to this object are reflected in the dataset.

    source
    ArchGDAL.columnnameMethod
    columnname(rat::RasterAttrTable, i::Integer)

    Fetch name of indicated column.

    Parameters

    • i the column index (zero based).

    Returns

    the column name or an empty string for invalid column numbers.

    source
    ArchGDAL.columntypeMethod
    columntype(rat::RasterAttrTable, i::Integer)

    Fetch column type.

    Parameters

    • col the column index (zero based).

    Returns

    column type or GFT_Integer if the column index is illegal.

    source
    ArchGDAL.createcolumn!Method
    createcolumn!(rat::RasterAttrTable, name, fieldtype::GDALRATFieldType,
    +    fieldusage::GDALRATFieldUsage)

    Create new column.

    If the table already has rows, all row values for the new column will be initialized to the default value ("", or zero). The new column is always created as the last column, can will be column (field) "GetColumnCount()-1" after CreateColumn() has completed successfully.

    source
    ArchGDAL.findcolumnindexMethod
    findcolumnindex(rat::RasterAttrTable, usage::GDALRATFieldUsage)

    Returns the index of the first column of the requested usage type, or -1 if no match is found.

    Parameters

    • usage usage type to search for.
    source
    ArchGDAL.findrowindexMethod
    findrowindex(rat::RasterAttrTable, pxvalue::Real)

    Get row for pixel value.

    Given a raw pixel value, the raster attribute table is scanned to determine which row in the table applies to the pixel value. The row index is returned.

    Parameters

    • pxvalue the pixel value.

    Returns

    The row index or -1 if no row is appropriate.

    source
    ArchGDAL.getlinearbinningMethod
    getlinearbinning(rat::RasterAttrTable)

    Get linear binning information.

    Returns

    • row0min the lower bound (pixel value) of the first category.
    • binsize the width of each category (in pixel value units).
    source
    ArchGDAL.initializeRAT!Method
    initializeRAT!(rat::RasterAttrTable, colortable::ColorTable)

    Initialize from color table.

    This method will setup a whole raster attribute table based on the contents of the passed color table. The Value (GFUMinMax), Red (GFURed), Green (GFUGreen), Blue (GFUBlue), and Alpha (GFU_Alpha) fields are created, and a row is set for each entry in the color table.

    The raster attribute table must be empty before calling initializeRAT!().

    The Value fields are set based on the implicit assumption with color tables that entry 0 applies to pixel value 0, 1 to 1, etc.

    source
    ArchGDAL.setlinearbinning!Method
    setlinearbinning!(rat::RasterAttrTable, row0min::Real, binsize::Real)

    Set linear binning information.

    For RATs with equal sized categories (in pixel value space) that are evenly spaced, this method may be used to associate the linear binning information with the table.

    Parameters

    • row0min the lower bound (pixel value) of the first category.
    • binsize the width of each category (in pixel value units).
    source
    ArchGDAL.setrowcount!Method
    setrowcount!(rat::RasterAttrTable, n::Integer)

    Set row count.

    Resizes the table to include the indicated number of rows. Newly created rows will be initialized to their default values - "" for strings, and zero for numeric fields.

    source
    ArchGDAL.setvalue!Function
    setvalue!(rat::RasterAttrTable, row, col, val)

    Set field value from string.

    The indicated field (column) on the indicated row is set from the passed value. The value will be automatically converted for other field types, with a possible loss of precision.

    Parameters

    • row row to fetch (zero based).
    • col column to fetch (zero based).
    • val the value to assign, can be an AbstractString, Integer or Float64.
    source
    ArchGDAL.toColorTableFunction
    toColorTable(rat::RasterAttrTable, n::Integer = -1)

    Translate to a color table.

    Parameters

    • n The number of entries to produce (0 to n-1), or -1 to auto-determine the number of entries.

    Returns

    the generated color table or NULL on failure.

    source
    ArchGDAL.unsafe_cloneMethod
    unsafe_clone(rat::RasterAttrTable)

    Copy Raster Attribute Table.

    Creates a new copy of an existing raster attribute table. The new copy becomes the responsibility of the caller to destroy. May fail (return NULL) if the attribute table is too large to clone: (nrow() * ncolumn() > RAT_MAX_ELEM_FOR_CLONE)

    source
    ArchGDAL.accessflagMethod
    accessflag(band::AbstractRasterBand)

    Return the access flag (e.g. OF_READONLY or OF_UPDATE) for this band.

    source
    ArchGDAL.blocksizeMethod
    blocksize(band::AbstractRasterBand)

    Fetch the "natural" block size of this band.

    GDAL contains a concept of the natural block size of rasters so that applications can organized data access efficiently for some file formats. The natural block size is the block size that is most efficient for accessing the format. For many formats this is simple a whole scanline in which case *pnXSize is set to GetXSize(), and *pnYSize is set to 1.

    However, for tiled images this will typically be the tile size.

    Note that the X and Y block sizes don't have to divide the image size evenly, meaning that right and bottom edge blocks may be incomplete. See ReadBlock() for an example of code dealing with these issues.

    source
    ArchGDAL.copywholeraster!Method
    copywholeraster!( source::AbstractRasterBand, dest::AbstractRasterBand;
    +    [options, [progressfunc]])

    Copy all raster band raster data.

    This function copies the complete raster contents of one band to another similarly configured band. The source and destination bands must have the same width and height. The bands do not have to have the same data type.

    It implements efficient copying, in particular "chunking" the copy in substantial blocks.

    Currently the only options value supported is : "COMPRESSED=YES" to force alignment on target dataset block sizes to achieve best compression. More options may be supported in the future.

    Parameters

    • source the source band
    • dest the destination band
    • options transfer hints in "StringList" Name=Value format.
    • progressfunc a function(::Float64, ::String)::Bool to call to report progress
    source
    ArchGDAL.createmaskband!Method
    createmaskband!(band::AbstractRasterBand, nflags::Integer)

    Adds a mask band to the current band.

    The default implementation of the CreateMaskBand() method is implemented based on similar rules to the .ovr handling implemented using the GDALDefaultOverviews object. A TIFF file with the extension .msk will be created with the same basename as the original file, and it will have as many bands as the original image (or just one for GMF_PER_DATASET). The mask images will be deflate compressed tiled images with the same block size as the original image if possible.

    If you got a mask band with a previous call to GetMaskBand(), it might be invalidated by CreateMaskBand(). So you have to call GetMaskBand() again.

    See also: http://trac.osgeo.org/gdal/wiki/rfc15_nodatabitmask

    source
    ArchGDAL.fillraster!Method
    fillraster!(band::AbstractRasterBand, realvalue::Real, imagvalue::Real = 0)

    Fill this band with a constant value.

    GDAL makes no guarantees about what values pixels in newly created files are set to, so this method can be used to clear a band to a specified "default" value. The fill value is passed in as a double but this will be converted to the underlying type before writing to the file. An optional second argument allows the imaginary component of a complex constant value to be specified.

    Parameters

    • realvalue: Real component of fill value
    • imagvalue: Imaginary component of fill value, defaults to zero
    source
    ArchGDAL.getcategorynamesMethod
    getcategorynames(band::AbstractRasterBand)

    Fetch the list of category names for this raster.

    The return list is a "StringList" in the sense of the CPL functions. That is a NULL terminated array of strings. Raster values without associated names will have an empty string in the returned list. The first entry in the list is for raster values of zero, and so on.

    source
    ArchGDAL.getdatasetMethod
    getdataset(band::AbstractRasterBand)

    Fetch the handle to its dataset handle, or NULL if this cannot be determined.

    Note that some RasterBands are not considered to be a part of a dataset, such as overviews or other "freestanding" bands.

    source
    ArchGDAL.getdefaultRATMethod
    getdefaultRAT(band::AbstractRasterBand)

    A RAT will be returned if there is a default one associated with the band, otherwise NULL is returned. The returned RAT is owned by the band and should not be deleted by the application.

    source
    ArchGDAL.getmaskbandMethod
    getmaskband(band::IRasterBand)

    Return the mask band associated with the band.

    The RasterBand class includes a default implementation of GetMaskBand() that returns one of four default implementations:

    • If a corresponding .msk file exists it will be used for the mask band.
    • If the dataset has a NODATA_VALUES metadata item, an instance of the new

    GDALNoDataValuesMaskBand class will be returned. GetMaskFlags() will return GMF_NODATA | GMF_PER_DATASET.

    • If the band has a nodata value set, an instance of the new

    GDALNodataMaskRasterBand class will be returned. GetMaskFlags() will return GMF_NODATA.

    • If there is no nodata value, but the dataset has an alpha band that seems to

    apply to this band (specific rules yet to be determined) and that is of type GDT_Byte then that alpha band will be returned, and the flags GMF_PER_DATASET and GMF_ALPHA will be returned in the flags.

    • If neither of the above apply, an instance of the new

    GDALAllValidRasterBand class will be returned that has 255 values for all pixels. The null flags will return GMF_ALL_VALID.

    Note that the GetMaskBand() should always return a RasterBand mask, even if it is only an all 255 mask with the flags indicating GMF_ALL_VALID.

    See also: http://trac.osgeo.org/gdal/wiki/rfc15_nodatabitmask

    Returns

    a valid mask band.

    source
    ArchGDAL.getnodatavalueMethod
    getnodatavalue(band::AbstractRasterBand)

    Fetch the no data value for this band.

    If there is no out of data value, nothing will be returned instead. The no data value for a band is generally a special marker value used to mark pixels that are not valid data. Such pixels should generally not be displayed, nor contribute to analysis operations.

    Returns

    the nodata value for this band or nothing.

    source
    ArchGDAL.getoffsetMethod
    getoffset(band::AbstractRasterBand)

    Fetch the raster value offset.

    This (in combination with GetScale()) is used to transform raw pixel values into the units returned by GetUnits(). For e.g. this might be used to store elevations in GUInt16 bands with a precision of 0.1, starting from -100.

    Units value = (raw value * scale) + offset

    For file formats that don't know this intrinsically, a value of 0 is returned.

    source
    ArchGDAL.getscaleMethod
    getscale(band::AbstractRasterBand)

    Fetch the raster value scale.

    This value (in combination with the GetOffset() value) is used to transform raw pixel values into the units returned by GetUnits(). For example this might be used to store elevations in GUInt16 bands with a precision of 0.1, and starting from -100.

    Units value = (raw value * scale) + offset

    For file formats that don't know this intrinsically a value of one is returned.

    source
    ArchGDAL.getunittypeMethod
    getunittype(band::AbstractRasterBand)

    Return a name for the units of this raster's values. For instance, it might be "m" for an elevation model in meters, or "ft" for feet.

    source
    ArchGDAL.indexofMethod
    indexof(band::AbstractRasterBand)

    Fetch the band number (1+) within its dataset, or 0 if unknown.

    This method may return a value of 0 to indicate overviews, or free-standing RasterBand objects without a relationship to a dataset.

    source
    ArchGDAL.maskflaginfoMethod
    maskflaginfo(band::AbstractRasterBand)

    Returns the flags as in maskflags(@ref) but unpacks the bit values into a named tuple with the following fields:

    • all_valid
    • per_dataset
    • alpha
    • nodata

    Returns

    A named tuple with unpacked mask flags

    source
    ArchGDAL.maskflagsMethod
    maskflags(band::AbstractRasterBand)

    Return the status flags of the mask band associated with the band.

    The GetMaskFlags() method returns an bitwise OR-ed set of status flags with the following available definitions that may be extended in the future:

    • GMF_ALL_VALID (0x01): There are no invalid pixels, all mask values

    will be 255. When used this will normally be the only flag set.

    • GMF_PER_DATASET (0x02): The mask band is shared between all bands on

    the dataset.

    • GMF_ALPHA (0x04): The mask band is actually an alpha band and may

    have values other than 0 and 255.

    • GMF_NODATA (0x08): Indicates the mask is actually being generated

    from nodata values. (mutually exclusive of GMF_ALPHA)

    The RasterBand class includes a default implementation of GetMaskBand() that returns one of four default implementations:

    • If a corresponding .msk file exists it will be used for the mask band.
    • If the dataset has a NODATA_VALUES metadata item, an instance of the new

    GDALNoDataValuesMaskBand class will be returned. GetMaskFlags() will return GMF_NODATA | GMF_PER_DATASET.

    • If the band has a nodata value set, an instance of the new

    GDALNodataMaskRasterBand class will be returned. GetMaskFlags() will return GMF_NODATA.

    • If there is no nodata value, but the dataset has an alpha band that seems to

    apply to this band (specific rules yet to be determined) and that is of type GDT_Byte then that alpha band will be returned, and the flags GMF_PER_DATASET and GMF_ALPHA will be returned in the flags.

    • If neither of the above apply, an instance of the new GDALAllValidRasterBand

    class will be returned that has 255 values for all pixels. The null flags will return GMF_ALL_VALID.

    See also: http://trac.osgeo.org/gdal/wiki/rfc15_nodatabitmask

    Returns

    a valid mask band.

    source
    ArchGDAL.noverviewMethod
    noverview(band::AbstractRasterBand)

    Return the number of overview layers available, zero if none.

    source
    ArchGDAL.regenerateoverviews!Method
    regenerateoverviews!(band::AbstractRasterBand,
    +    overviewbands::Vector{<:AbstractRasterBand}, resampling = "NEAREST")

    Generate downsampled overviews.

    This function will generate one or more overview images from a base image using the requested downsampling algorithm. Its primary use is for generating overviews via BuildOverviews(), but it can also be used to generate downsampled images in one file from another outside the overview architecture.

    Parameters

    • band the source (base level) band.
    • overviewbands the list of downsampled bands to be generated.

    Keyword Arguments

    • resampling (optional) Resampling algorithm (eg. "AVERAGE"). default to "NEAREST".
    • progressfunc (optional) a function(::Float64, ::String)::Bool to call to report progress

    Additional Remarks

    The output bands need to exist in advance.

    This function will honour properly NODATA_VALUES tuples (special dataset metadata) so that only a given RGB triplet (in case of a RGB image) will be considered as the nodata value and not each value of the triplet independantly per band.

    source
    ArchGDAL.sampleoverviewMethod
    sampleoverview(band::IRasterBand, nsamples::Integer)

    Fetch best overview satisfying nsamples number of samples.

    Returns the most reduced overview of the given band that still satisfies the desired number of samples nsamples. This function can be used with zero as the number of desired samples to fetch the most reduced overview. The same band as was passed in will be returned if it has not overviews, or if none of the overviews have enough samples.

    source
    ArchGDAL.setcolortable!Method
    setcolortable!(band::AbstractRasterBand, colortable::ColorTable)

    Set the raster color table.

    The driver will make a copy of all desired data in the colortable. It remains owned by the caller after the call.

    Parameters

    • colortable color table to apply (where supported).
    source
    ArchGDAL.setdefaultRAT!Method
    setdefaultRAT!(band::AbstractRasterBand, rat::RasterAttrTable)

    Set default Raster Attribute Table.

    Associates a default RAT with the band. If not implemented for the format a CPLE_NotSupported error will be issued. If successful a copy of the RAT is made, the original remains owned by the caller.

    source
    ArchGDAL.setunittype!Method
    setunittype!(band::AbstractRasterBand, unitstring::AbstractString)

    Set unit type of band to unittype.

    Values should be one of "" (the default indicating it is unknown), "m" indicating meters, or "ft" indicating feet, though other nonstandard values are allowed.

    source
    ArchGDAL.unsafe_getcolortableMethod
    unsafe_getcolortable(band::AbstractRasterBand)

    Returns a clone of the color table associated with the band.

    (If there is no associated color table, the original result is NULL. The original color table remains owned by the RasterBand, and can't be depended on for long, nor should it ever be modified by the caller.)

    source
    ArchGDAL.widthMethod
    width(band::AbstractRasterBand)

    Fetch the width in pixels of this band.

    source
    ArchGDAL.rasterio!Function
    rasterio!(dataset::AbstractDataset, buffer::AbstractArray{<:Any, 3},
    +    bands; <keyword arguments>)
    +rasterio!(dataset::AbstractDataset, buffer::AbstractArray{<:Any, 3}, bands, rows,
    +    cols; <keyword arguments>)
    +rasterio!(rasterband::AbstractRasterBand, buffer::AbstractMatrix{<:Any};
    +    <keyword arguments>)
    +rasterio!(rasterband::AbstractRasterBand, buffer::AbstractMatrix{<:Any}, rows,
    +    cols; <keyword arguments>)

    Read/write a region of image data from multiple bands.

    This method allows reading a region of one or more RasterBands from this dataset into a buffer, or writing data from a buffer into a region of the RasterBands. It automatically takes care of data type translation if the element type (<:Any) of the buffer is different than that of the RasterBand. The method also takes care of image decimation / replication if the buffer size (xsz × ysz) is different than the size of the region being accessed (xsize × ysize).

    The pxspace, linespace and bandspace parameters allow reading into or writing from various organization of buffers.

    For highest performance full resolution data access, read and write on "block boundaries" as returned by blocksize(), or use the readblock!() and writeblock!() methods.

    Parameters

    • rows A continuous range of rows expressed as a UnitRange{<:Integer}, such as 2:9.
    • cols A continuous range of columns expressed as a UnitRange{<:Integer}, such as 2:9.
    • access Either GF_Read to read a region of data, or GF_Write to write a region of data.
    • xoffset The pixel offset to the top left corner of the region to be accessed. It will be 0 (default) to start from the left.
    • yoffset The line offset to the top left corner of the region to be accessed. It will be 0 (default) to start from the top.
    • xsize The width of the region of the band to be accessed in pixels.
    • ysize The height of the region of the band to be accessed in lines.
    • buffer The buffer into which the data should be read, or from which it should be written. It must contain ≥ xsz * ysz * <# of bands> words of type eltype(buffer). It is organized in left to right, top to bottom pixel order. Spacing is controlled by the pxspace, and linespace parameters
    • xsz The width of the buffer into which the desired region is to be read, or from which it is to be written.
    • ysz The height of the buffer into which the desired region is to be read, or from which it is to be written.
    • bands The list of bands (1-based) to be read/written.
    • pxspace The byte offset from the start of a pixel value in the buffer to the start of the next pixel value within a scanline. By default (i.e., 0) the size of eltype(buffer) will be used.
    • linespace The byte offset from the start of one scanline in pBuffer to the start of the next. By default (i.e., 0) the value of sizeof(eltype(buffer)) * xsz will be used.
    • bandspace The byte offset from the start of one bands data to the start of the next. By default (0), it will be linespace * ysz implying band sequential organization of the buffer.

    Returns

    CE_Failure if the access fails, otherwise CE_None.

    source
    ArchGDAL.readblock!Method
    readblock!(rb::AbstractRasterBand, xoffset::Integer, yoffset::Integer,
    +    buffer)

    Read a block of image data efficiently.

    This method accesses a "natural" block from the raster band without resampling, or data type conversion. For a more generalized, but potentially less efficient access use RasterIO().

    Parameters

    • xoffset the horizontal block offset, with zero indicating the left most block, 1 the next block and so forth.
    • yoffset the vertical block offset, with zero indicating the top most block, 1 the next block and so forth.
    • buffer the buffer into which the data will be read. The buffer must be large enough to hold GetBlockXSize()*GetBlockYSize() words of type GetRasterDataType().
    source
    ArchGDAL.writeblock!Method
    writeblock!(rb::AbstractRasterBand, xoffset::Integer, yoffset::Integer,
    +    buffer)

    Write a block of image data efficiently.

    This method accesses a "natural" block from the raster band without resampling, or data type conversion. For a more generalized, but potentially less efficient access use RasterIO().

    Parameters

    • xoffset the horizontal block offset, with zero indicating the left most block, 1 the next block and so forth.
    • yoffset the vertical block offset, with zero indicating the left most block, 1 the next block and so forth.
    • buffer the buffer from which the data will be written. The buffer must be large enough to hold GetBlockXSize()*GetBlockYSize() words of type GetRasterDataType().
    source

    Spatial Projections

    ArchGDAL.cloneMethod
    clone(spref::AbstractSpatialRef)

    Makes a clone of the Spatial Reference System. May return NULL.

    source
    ArchGDAL.crs2transformMethod
    crs2transform(f::Function, sourcecrs::GeoFormat, targetcrs::GeoFormat;
    +    kwargs...)

    Run the function f on a coord transform generated from the source and target crs definitions. These can be any GeoFormat (from GeoFormatTypes) that holds a coordinate reference system.

    kwargs are passed through to importCRS.

    source
    ArchGDAL.getattrvalueMethod
    getattrvalue(spref::AbstractSpatialRef, name::AbstractString, i::Integer)

    Fetch indicated attribute of named node.

    This method uses GetAttrNode() to find the named node, and then extracts the value of the indicated child. Thus a call to getattrvalue(spref,"UNIT",1) would return the second child of the UNIT node, which is normally the length of the linear unit in meters.

    Parameters name the tree node to look for (case insensitive). i the child of the node to fetch (zero based).

    Returns the requested value, or nothing if it fails for any reason.

    source
    ArchGDAL.importCRS!Function
    importCRS!(spref::AbstractSpatialRef, x::GeoFormatTypes.GeoFormat)

    Import a coordinate reference system from a GeoFormat into the spatial ref.

    source
    ArchGDAL.importCRSMethod
    importCRS(x::GeoFormatTypes.GeoFormat; [order=:compliant])

    Import a coordinate reference system from a GeoFormat into GDAL, returning an ArchGDAL.AbstractSpatialRef.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant (the default) will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importEPSG!Method
    importEPSG!(spref::AbstractSpatialRef, code::Integer)

    Initialize SRS based on EPSG GCS or PCS code.

    This method will initialize the spatial reference based on the passed in EPSG GCS or PCS code. It is relatively expensive, and generally involves quite a bit of text file scanning. Reasonable efforts should be made to avoid calling it many times for the same coordinate system.

    Additional Remarks

    This method is similar to importFromEPSGA() except that EPSG preferred axis ordering will not be applied for geographic coordinate systems. EPSG normally defines geographic coordinate systems to use lat/long contrary to typical GIS use). Since OGR 1.10.0, EPSG preferred axis ordering will also not be applied for projected coordinate systems that use northing/easting order.

    The coordinate system definitions are normally read from the EPSG derived support files such as pcs.csv, gcs.csv, pcs.override.csv, gcs.override.csv and falling back to search for a PROJ.4 epsg init file or a definition in epsg.wkt.

    These support files are normally searched for in /usr/local/share/gdal or in the directory identified by the GDAL_DATA configuration option. See CPLFindFile() for details.

    source
    ArchGDAL.importEPSGMethod
    importEPSG(code::Integer; [order=:compliant])

    Construct a Spatial Reference System from its EPSG GCS or PCS code.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importEPSGA!Method
    importEPSGA!(spref::AbstractSpatialRef, code::Integer)

    Initialize SRS based on EPSG CRS code.

    This method is similar to importFromEPSG() except that EPSG preferred axis ordering will be applied for geographic and projected coordinate systems. EPSG normally defines geographic coordinate systems to use lat/long, and also there are also a few projected coordinate systems that use northing/easting order contrary to typical GIS use). See importFromEPSG() for more details on operation of this method.

    source
    ArchGDAL.importEPSGAMethod
    importEPSGA(code::Integer; [order=:compliant])

    Construct a Spatial Reference System from its EPSG CRS code.

    This method is similar to importFromEPSG() except that EPSG preferred axis ordering will be applied for geographic and projected coordinate systems. EPSG normally defines geographic coordinate systems to use lat/long, and also there are also a few projected coordinate systems that use northing/easting order contrary to typical GIS use). See importFromEPSG() for more details on operation of this method.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importESRI!Method
    importESRI!(spref::AbstractSpatialRef, esristr::AbstractString)

    Import coordinate system from ESRI .prj format(s).

    This function will read the text loaded from an ESRI .prj file, and translate it into an OGRSpatialReference definition. This should support many (but by no means all) old style (Arc/Info 7.x) .prj files, as well as the newer pseudo-OGC WKT .prj files. Note that new style .prj files are in OGC WKT format, but require some manipulation to correct datum names, and units on some projection parameters. This is addressed within importFromESRI() by an automatic call to morphFromESRI().

    Currently only GEOGRAPHIC, UTM, STATEPLANE, GREATBRITIAN_GRID, ALBERS, EQUIDISTANT_CONIC, TRANSVERSE (mercator), POLAR, MERCATOR and POLYCONIC projections are supported from old style files.

    At this time there is no equivalent exportToESRI() method. Writing old style .prj files is not supported by OGRSpatialReference. However the morphToESRI() and exportToWkt() methods can be used to generate output suitable to write to new style (Arc 8) .prj files.

    source
    ArchGDAL.importESRIMethod
    importESRI(esristr::AbstractString; kwargs...)

    Create SRS from its ESRI .prj format(s).

    Passing the keyword argument order=:compliant or order=:trad will set the mapping strategy to return compliant axis order or traditional lon/lat order.

    source
    ArchGDAL.importPROJ4!Method
    importPROJ4!(spref::AbstractSpatialRef, projstr::AbstractString)

    Import PROJ.4 coordinate string.

    The OGRSpatialReference is initialized from the passed PROJ.4 style coordinate system string. In addition to many +proj formulations which have OGC equivalents, it is also possible to import "+init=epsg:n" style definitions. These are passed to importFromEPSG(). Other init strings (such as the state plane zones) are not currently supported.

    Example: pszProj4 = "+proj=utm +zone=11 +datum=WGS84"

    Some parameters, such as grids, recognized by PROJ.4 may not be well understood and translated into the OGRSpatialReference model. It is possible to add the +wktext parameter which is a special keyword that OGR recognized as meaning "embed the entire PROJ.4 string in the WKT and use it literally when converting back to PROJ.4 format".

    For example: "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +nadgrids=nzgd2kgrid0005.gsb +wktext"

    source
    ArchGDAL.importPROJ4Method
    importPROJ4(projstr::AbstractString; [order=:compliant])

    Create SRS from its PROJ.4 string.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importURL!Method
    importURL!(spref::AbstractSpatialRef, url::AbstractString)

    Set spatial reference from a URL.

    This method will download the spatial reference at a given URL and feed it into SetFromUserInput for you.

    source
    ArchGDAL.importURLMethod
    importURL(url::AbstractString; [order=:compliant])

    Construct SRS from a URL.

    This method will download the spatial reference at a given URL and feed it into SetFromUserInput for you.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importUserInputMethod
    importUserInput(code::AbstractString; [order=:compliant])

    Construct a Spatial Reference System from a user provided code that is parsed by GDAL. This is useful when the input code is in an unknown format or a shortcut not covered by more constrained methods. An example is the code "EPSG:4326+3855", the shortest way to describe a combination of a horizontal and vertical crs.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importWKT!Method
    importWKT!(spref::AbstractSpatialRef, wktstr::AbstractString)

    Import from WKT string.

    This method will wipe the existing SRS definition, and reassign it based on the contents of the passed WKT string. Only as much of the input string as needed to construct this SRS is consumed from the input string, and the input string pointer is then updated to point to the remaining (unused) input.

    source
    ArchGDAL.importWKTMethod
    importWKT(wktstr::AbstractString; [order=:compliant])

    Create SRS from its WKT string.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.importXML!Method
    importXML!(spref::AbstractSpatialRef, xmlstr::AbstractString)

    Import SRS from XML format (GML only currently).

    source
    ArchGDAL.importXMLMethod
    importXML(xmlstr::AbstractString; [order=:compliant])

    Construct SRS from XML format (GML only currently).

    Passing the keyword argument order=:compliant or order=:trad will set the mapping strategy to return compliant axis order or traditional lon/lat order.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.morphfromESRI!Method
    morphfromESRI!(spref::AbstractSpatialRef)

    Convert in place from ESRI WKT format.

    The value notes of this coordinate system are modified in various manners to adhere more closely to the WKT standard. This mostly involves translating a variety of ESRI names for projections, arguments and datums to "standard" names, as defined by Adam Gawne-Cain's reference translation of EPSG to WKT for the CT specification.

    Missing parameters in TOWGS84, DATUM or GEOGCS nodes can be added to the WKT, comparing existing WKT parameters to GDAL's databases. Note that this optional procedure is very conservative and should not introduce false information into the WKT definition (although caution should be advised when activating it). Needs the Configuration Option GDAL_FIX_ESRI_WKT be set to one of the following (TOWGS84 recommended for proper datum shift calculations)

    GDAL_FIX_ESRI_WKT values:

    • TOWGS84 Adds missing TOWGS84 parameters (necessary for datum transformations), based on named datum and spheroid values.
    • DATUM Adds EPSG AUTHORITY nodes and sets SPHEROID name to OGR spec.
    • GEOGCS Adds EPSG AUTHORITY nodes and sets GEOGCS, DATUM and SPHEROID names to OGR spec. Effectively replaces GEOGCS node with the result of importFromEPSG(n), using EPSG code n corresponding to the existing GEOGCS. Does not impact PROJCS values.
    source
    ArchGDAL.morphtoESRI!Method
    morphtoESRI!(spref::AbstractSpatialRef)

    Convert in place to ESRI WKT format.

    The value nodes of this coordinate system are modified in various manners more closely map onto the ESRI concept of WKT format. This includes renaming a variety of projections and arguments, and stripping out nodes note recognised by ESRI (like AUTHORITY and AXIS).

    source
    ArchGDAL.newspatialrefFunction
    newspatialref(wkt::AbstractString = ""; order=:compliant)

    Construct a Spatial Reference System from its WKT.

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.
    source
    ArchGDAL.reprojectMethod
    reproject(points, sourceproj::GeoFormat, destproj::GeoFormat;
    +    [order=:compliant])

    Reproject points to a different coordinate reference system and/or format.

    Arguments

    • coord: Vector of Geometry points
    • sourcecrs: The current coordinate reference system, as a GeoFormat
    • targetcrs: The coordinate reference system to transform to, using any CRS capable GeoFormat

    Keyword Arguments

    • order: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant (the default) will use axis ordering compliant with the relevant CRS authority.

    Example

    julia> using ArchGDAL, GeoFormatTypes
    +
    +julia> ArchGDAL.reproject(
    +    [[118, 34], [119, 35]],
    +    ProjString("+proj=longlat +datum=WGS84 +no_defs"),
    +    EPSG(2025)
    +)
    +2-element Array{Array{Float64,1},1}:
    + [-2.60813482878655e6, 1.5770429674905164e7]
    + [-2.663928675953517e6, 1.56208905951487e7]
    source
    ArchGDAL.setattrvalue!Method
    setattrvalue!(spref::AbstractSpatialRef, path::AbstractString,
    +    value::AbstractString)

    Set attribute value in spatial reference.

    Missing intermediate nodes in the path will be created if not already in existence. If the attribute has no children one will be created and assigned the value otherwise the zeroth child will be assigned the value.

    Parameters

    • path: full path to attribute to be set. For instance "PROJCS|GEOGCS|UNIT".
    • value: (optional) to be assigned to node, such as "meter". This may be left out if you just want to force creation of the intermediate path.
    source
    ArchGDAL.toEPSGMethod
    toEPSG(spref::AbstractSpatialRef)

    Export EPSG code for this coordinate system if available.

    source
    ArchGDAL.toMICoordSysMethod
    toMICoordSys(spref::AbstractSpatialRef)

    Export coordinate system in Mapinfo style CoordSys format.

    source
    ArchGDAL.toWKTMethod
    toWKT(spref::AbstractSpatialRef, simplify::Bool)

    Convert this SRS into a nicely formatted WKT string for display to a person.

    Parameters

    • spref: the SRS to be converted
    • simplify: true if the AXIS, AUTHORITY and EXTENSION nodes should be stripped off.
    source
    ArchGDAL.toXMLMethod
    toXML(spref::AbstractSpatialRef)

    Export coordinate system in XML format.

    Converts the loaded coordinate reference system into XML format to the extent possible. LOCALCS coordinate systems are not translatable. An empty string will be returned along with OGRERRNONE.

    source
    ArchGDAL.transform!Method
    transform!(xvertices, yvertices, zvertices, obj::CoordTransform)

    Transform points from source to destination space.

    Parameters

    • xvertices array of nCount X vertices, modified in place.
    • yvertices array of nCount Y vertices, modified in place.
    • zvertices array of nCount Z vertices, modified in place.

    Returns

    true on success, or false if some or all points fail to transform.

    source
    ArchGDAL.unsafe_createcoordtransMethod
    unsafe_createcoordtrans(source::AbstractSpatialRef,
    +    target::AbstractSpatialRef)

    Create transformation object.

    Parameters

    • source: source spatial reference system.
    • target: target spatial reference system.

    Returns

    NULL on failure or a ready to use transformation object.

    source

    Geo Transformations

    ArchGDAL.applygeotransformMethod
    applygeotransform(geotransform::Vector{Float64}, pixel::Float64,
    +    line::Float64)

    Apply GeoTransform to x/y coordinate.

    Applies the following computation, converting a (pixel,line) coordinate into a georeferenced (geo_x,geo_y) location.

        geo_x = geotransform[1] + pixel*geotransform[2] + line*geotransform[3]
    +    geo_y = geotransform[4] + pixel*geotransform[5] + line*geotransform[6]

    Parameters

    • geotransform Six coefficient GeoTransform to apply.
    • pixel input pixel position.
    • line input line position.
    source
    ArchGDAL.composegeotransform!Method
    composegeotransform!(gt1::Vector{Float64}, gt2::Vector{Float64},
    +    gtout::Vector{Float64})

    Compose two geotransforms.

    The resulting geotransform is the equivalent to padfGT1 and then padfGT2 being applied to a point.

    Parameters

    • gt1 the first geotransform, six values.
    • gt2 the second geotransform, six values.
    • gtout the output geotransform, six values.
    source
    ArchGDAL.invgeotransform!Method
    invgeotransform!(gt_in::Vector{Float64}, gt_out::Vector{Float64})

    Invert Geotransform.

    This function will invert a standard 3x2 set of GeoTransform coefficients. This converts the equation from being pixel to geo to being geo to pixel.

    Parameters

    • gt_in Input geotransform (six doubles - unaltered).
    • gt_out Output geotransform (six doubles - updated).

    Returns

    gt_out

    source

    Utilities

    ArchGDAL.gdalinfoFunction
    gdalinfo(dataset::AbstractDataset, options = String[])

    List various information about a GDAL supported raster dataset.

    Parameters

    • dataset: The source dataset.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdalinfo utility.

    Returns

    String corresponding to the information about the raster dataset.

    source
    ArchGDAL.unsafe_gdalbuildvrtFunction
    unsafe_gdalbuildvrt(
    +    datasets::Vector{<:AbstractDataset},
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Build a VRT from a list of datasets.

    Parameters

    • datasets: The list of input datasets.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdalbuildvrt utility.

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdaldemFunction
    unsafe_gdaldem(
    +    dataset::AbstractDataset,
    +    processing::String,
    +    options = String[];
    +    dest = "/vsimem/tmp",
    +    colorfile)

    Tools to analyze and visualize DEMs.

    Parameters

    • dataset: The source dataset.
    • pszProcessing: the processing to apply (one of "hillshade", "slope", "aspect", "color-relief", "TRI", "TPI", "Roughness").
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdaldem utility.

    Keyword Arguments

    • colorfile: color file (mandatory for "color-relief" processing, should be empty otherwise).

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdalgridFunction
    unsafe_gdalgrid(
    +    dataset::AbstractDataset,
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Create a raster from the scattered data.

    Parameters

    • dataset: The source dataset.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdal_grid utility.

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdalnearblackFunction
    unsafe_gdalnearblack(
    +    dataset::AbstractDataset,
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Convert nearly black/white borders to exact value.

    Parameters

    • dataset: The source dataset.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the nearblack utility.

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdalrasterizeFunction
    unsafe_gdalrasterize(
    +    dataset::AbstractDataset,
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Burn vector geometries into a raster.

    Parameters

    • dataset: The source dataset.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdal_rasterize utility.

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdaltranslateFunction
    unsafe_gdaltranslate(
    +    dataset::AbstractDataset,
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Convert raster data between different formats.

    Parameters

    • dataset: The dataset to be translated.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdal_translate utility.

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdalvectortranslateFunction
    unsafe_gdalvectortranslate(
    +    datasets::Vector{<:AbstractDataset},
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Convert vector data between file formats.

    Parameters

    • datasets: The list of input datasets (only 1 supported currently).
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the ogr2ogr utility.

    Returns

    The output dataset.

    source
    ArchGDAL.unsafe_gdalwarpFunction
    unsafe_gdalwarp(
    +    datasets::Vector{<:AbstractDataset},
    +    options = String[];
    +    dest = "/vsimem/tmp")

    Image reprojection and warping function.

    Parameters

    • datasets: The list of input datasets.
    • options: List of options (potentially including filename and open options). The accepted options are the ones of the gdalwarp utility.

    Returns

    The output dataset.

    source

    Format Drivers

    ArchGDAL.copyfilesFunction
    copyfiles(drv::Driver, new::AbstractString, old::AbstractString)
    +copyfiles(drvname::AbstractString, new::AbstractString, old::AbstractString)

    Copy all the files associated with a dataset.

    source
    ArchGDAL.extensiondriverMethod
    extensiondriver(filename::AbstractString)

    Returns a driver shortname that matches the filename extension.

    So extensiondriver("/my/file.tif") == "GTiff".

    source
    ArchGDAL.extensionsMethod
    extensions()

    Returns a Dict{String,String} of all of the file extensions that can be read by GDAL, with their respective drivers' shortnames.

    source
    ArchGDAL.getdriverMethod
    getdriver(name::AbstractString)

    Fetch a driver based on the short name (such as GTiff).

    source
    ArchGDAL.identifydriverMethod
    identifydriver(filename::AbstractString)

    Identify the driver that can open a raster file.

    This function will try to identify the driver that can open the passed filename by invoking the Identify method of each registered Driver in turn. The first driver that successful identifies the file name will be returned. If all drivers fail then NULL is returned.

    source
    ArchGDAL.longnameMethod
    longname(drv::Driver)

    Return the long name of a driver (e.g. GeoTIFF), or empty string.

    source
    ArchGDAL.optionsMethod
    options(drv::Driver)

    Return the list of creation options of the driver [an XML string].

    source
    ArchGDAL.validateMethod
    validate(drv::Driver, options::Vector{<:AbstractString})

    Validate the list of creation options that are handled by a drv.

    This is a helper method primarily used by create() and copy() to validate that the passed in list of creation options is compatible with the GDAL_DMD_CREATIONOPTIONLIST metadata item defined by some drivers.

    Parameters

    • drv the handle of the driver with whom the lists of creation option must be validated
    • options the list of creation options. An array of strings, whose last element is a NULL pointer

    Returns

    true if the list of creation options is compatible with the create() and createcopy() method of the driver, false otherwise.

    Additional Remarks

    See also: options(drv::Driver)

    If the GDAL_DMD_CREATIONOPTIONLIST metadata item is not defined, this function will return $true$. Otherwise it will check that the keys and values in the list of creation options are compatible with the capabilities declared by the GDAL_DMD_CREATIONOPTIONLIST metadata item. In case of incompatibility a (non fatal) warning will be emited and $false$ will be returned.

    source

    GeoInterface

    diff --git a/previews/PR441/search/index.html b/previews/PR441/search/index.html new file mode 100644 index 00000000..4c53eebf --- /dev/null +++ b/previews/PR441/search/index.html @@ -0,0 +1,2 @@ + +Search · ArchGDAL.jl diff --git a/previews/PR441/search_index.js b/previews/PR441/search_index.js new file mode 100644 index 00000000..ff0ee2f8 --- /dev/null +++ b/previews/PR441/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"datasets/#Data-Model","page":"GDAL Datasets","title":"Data Model","text":"","category":"section"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"using ArchGDAL","category":"page"},{"location":"datasets/#GDAL-Datasets","page":"GDAL Datasets","title":"GDAL Datasets","text":"","category":"section"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"The following code demonstrates the general workflow for reading in a dataset:","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"ArchGDAL.read(filename) do dataset\n # work with dataset\nend","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"We defer the discussion on ArchGDAL.read(filename) to the section on Working with Files.","category":"page"},{"location":"datasets/#Vector-Datasets","page":"GDAL Datasets","title":"Vector Datasets","text":"","category":"section"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"In this section, we work with the data/point.geojson dataset:","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"dataset = ArchGDAL.read(\"data/point.geojson\")","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"The display indicates","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"the type of the object (GDAL Dataset)\nthe driver used to open it (shortname/longname: GeoJSON/GeoJSON)\nthe files that it corresponds to (data/point.geojson)\nthe number of layers in the dataset (1), and a brief summary of each.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"You can also programmatically retrieve them using","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"typeof(dataset): the type of the object (GDAL Dataset)\nArchGDAL.filelist(dataset): the files that it corresponds to ([\"data/point.geojson\"])\nArchGDAL.nlayer(dataset): the number of layers in the dataset (1)\ndriver =ArchGDAL.getdriver(dataset): the driver used to open it\nArchGDAL.shortname(driver): the short name of a driver (\"GeoJSON\")\nArchGDAL.longname(driver): the long name of a driver (\"GeoJSON\")\nlayer =ArchGDAL.getlayer(dataset, i): the i-th layer in the dataset.\nArchGDAL.getgeomtype(layer): the geometry type for layer (i.e. wkbPoint)\nArchGDAL.getname(layer): the name of layer (i.e. point)\nArchGDAL.nfeature(layer): the number of features in the layer (i.e. 4)","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"For more on working with features and vector data, see the Section on Feature Data.","category":"page"},{"location":"datasets/#Raster-Datasets","page":"GDAL Datasets","title":"Raster Datasets","text":"","category":"section"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"In this section, we work with the gdalworkshop/world.tif dataset:","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"dataset = ArchGDAL.read(\"gdalworkshop/world.tif\")","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"The display indicates","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"the type of the object (GDAL Dataset)\nthe driver used to open it (shortname/longname: GTiff/GeoTIFF)\nthe files that it corresponds to (gdalworkshop/world.tif)\nthe number of raster bands in the dataset (3), and a brief summary of each.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"You can also programmatically retrieve them using","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"typeof(dataset): the type of the object (GDAL Dataset)\nArchGDAL.filelist(dataset): the files that it corresponds to ([\"gdalworkshop/world.tif\"])\nArchGDAL.nraster(dataset): the number of rasters (3)\nArchGDAL.width(dataset): the width (2048 pixels)\nArchGDAL.height(dataset): the height (1024 pixels)\ndriver =ArchGDAL.getdriver(dataset): the driver used to open it\nArchGDAL.shortname(driver): the short name of a driver (\"GTiff\")\nArchGDAL.longname(driver): the long name of a driver (\"GeoTIFF\")\nband =ArchGDAL.getband(dataset, i): the i-th raster band\ni =ArchGDAL.indexof(band): the index of the raster band.\nArchGDAL.accessflag(band): the access flag (i.e. GA_ReadOnly)\nArchGDAL.getname(ArchGDAL.getcolorinterp(band)): the color channel (e.g. Red)\nArchGDAL.width(band): the width of the raster band (2048 pixels)\nArchGDAL.height(band): the height of the raster band (1024 pixels)\nArchGDAL.pixeltype(band): the pixel type of the raster band (i.e. UInt8)","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"For more on working with raster data, see the Section on Raster Data.","category":"page"},{"location":"datasets/#Working-with-Files","page":"GDAL Datasets","title":"Working with Files","text":"","category":"section"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"We provide the following methods for working with files:","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"ArchGDAL.copy: creates a copy of a dataset. This is often used with a virtual source dataset allowing configuration of band types, and other information without actually duplicating raster data.\nArchGDAL.create: creates a new dataset.\nArchGDAL.read: opens a dataset in read-only mode.\nArchGDAL.update: opens a dataset with the possibility of updating it. If you open a dataset object with update access, it is not recommended to open a new dataset on the same underlying file.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"In GDAL, datasets are closed by calling GDAL.close(). This will result in proper cleanup, and flushing of any pending writes. Forgetting to call GDAL.close() on a dataset opened in update mode in a popular format like GTiff will likely result in being unable to open it afterwards.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"In ArchGDAL, the closing of datasets is handled by the API and not by the user. ArchGDAL provides two methods for working with datasets.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"The first is to use a do-block:","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"ArchGDAL.(...) do dataset\n # work with dataset\nend","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"The second is to call the method directly:","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"dataset = ArchGDAL.(...)\n# work with dataset","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"note: Note\nThis pattern of using do-blocks to manage context plays a big way into the way we handle memory in this package. For details, see the section on Memory Management.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"The ArchGDAL.read method accepts keyword arguments(kwargs) viz. the GDAL open-options for reading .csv spatial datasets.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"Example: In a CSV the data is stored as String. ","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"dataset1 = ArchGDAL.read(\"data/multi_geom.csv\")\nlayer1 = ArchGDAL.getlayer(dataset1, 0)","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"Well this is weird, the CSV driver recognises our point and linestring geometries as String. Now if you have a .csvt file of the same name with the geometry types as WKT, they types will be recognized, else, GDAL offers open-options to tweak the read parameters that are passed as kwargs.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"So for the above CSV, we want the driver to detect our geometries, so according to open-options we should use the \"GEOM_POSSIBLE_NAMES=point,linestring\" option. Also we want that the geometry columns should not be kept as regular String columns, so we add a \"KEEP_GEOM_COLUMNS=NO\" option too.","category":"page"},{"location":"datasets/","page":"GDAL Datasets","title":"GDAL Datasets","text":"dataset2 = ArchGDAL.read(\"data/multi_geom.csv\", options = [\"GEOM_POSSIBLE_NAMES=point,linestring\", \"KEEP_GEOM_COLUMNS=NO\"])\n\nlayer2 = ArchGDAL.getlayer(dataset2, 0)","category":"page"},{"location":"considerations/#Design-Considerations","page":"Design Considerations","title":"Design Considerations","text":"","category":"section"},{"location":"considerations/#Code-Defensiveness","page":"Design Considerations","title":"Code Defensiveness","text":"","category":"section"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"Although GDAL provides a unified data model for different data formats, there are still significant differences between their implementations such that each driver is effectively its own application. This has the following implications:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"Not all configuration options works for all drivers.\nNot all capabilities are available for all drivers.\nPerformance characteristics may vary significantly depending on the driver.","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"ArchGDAL.jl provides mechanisms for setting GDAL's configuration options, and does not maintain its own list of sanctioned options for each driver. Although work is underway to make this an easier experience for the user, it remains the responsibility of the user to check that a particular configuration exists and works for their choice of drivers.","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"Here's a collection of references for developers who are interested:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"https://trac.osgeo.org/gdal/wiki/ConfigOptions\nhttps://github.com/mapbox/rasterio/pull/665\nhttps://github.com/mapbox/rasterio/issues/875\nhttps://rasterio.readthedocs.io/en/latest/topics/configuration.html","category":"page"},{"location":"considerations/#GDAL-Enum-Values","page":"Design Considerations","title":"GDAL Enum Values","text":"","category":"section"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"GDAL.jl uses CEnum.jl, which is a C-compatible enum, this is the default in Clang.jl. This is useful when the underlying values are of interest, for example the following snippets from src/types.jl:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"import Base.|\n\nfor T in (GDALOpenFlag, FieldValidation)\n eval(quote\n |(x::$T, y::UInt8) = UInt8(x) | y\n |(x::UInt8, y::$T) = x | UInt8(y)\n |(x::$T, y::$T) = UInt8(x) | UInt8(y)\n end)\nend","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"and","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"function basetype(gt::OGRwkbGeometryType)::OGRwkbGeometryType\n wkbGeomType = convert(GDAL.OGRwkbGeometryType, gt)\n wkbGeomType &= (~0x80000000) # Remove 2.5D flag.\n wkbGeomType %= 1000 # Normalize Z, M, and ZM types.\n return GDAL.OGRwkbGeometryType(wkbGeomType)\nend","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"However, the use of CEnum.jl allows for multiple enums to have the same underlying value, resulting in unintuitive behavior if they are used as keys in a dictionary. For example, in the following code:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"julia> Dict(GDAL.GCI_YCbCr_CrBand => \"a\", GDAL.GCI_Max => \"b\")\nDict{GDAL.GDALColorInterp, String} with 1 entry:\n GCI_YCbCr_CrBand => \"b\"","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"the entry for GDAL.GCI_YCbCr_CrBand => \"a\" got overwritten by GDAL.GCI_Max => \"b\" because both GDAL.GCI_YCbCr_CrBand and GDAL.GCI_Max corresponded to the same value.","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"To avoid such forms of behavior, this package uses Base.Enums instead, so the above example would result in the following behavior:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"julia> Dict(ArchGDAL.GCI_YCbCr_CrBand => \"a\", ArchGDAL.GCI_Max => \"b\")\nDict{ArchGDAL.GDALColorInterp, String} with 2 entries:\n GCI_YCbCr_CrBand => \"a\"\n GCI_Max => \"b\"","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"To maintain parity with GDAL behavior, ArchGDAL.jl provides conversion methods to map from the enums in ArchGDAL to the corresponding cenums from GDAL.jl when calling the corresponding GDAL functions.","category":"page"},{"location":"considerations/#Colors","page":"Design Considerations","title":"Colors","text":"","category":"section"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"Rather than encouraging operations on colortables (with very limited functionality from GDAL), users are better served by arrays of ColorTypes using Colors.jl, for example","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"range(startcolor, stop=endcolor, length=15)","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"instead of","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"createcolorramp!(colortable, startindex, startcolor, startindex+15, endcolor)","category":"page"},{"location":"considerations/#Images","page":"Design Considerations","title":"Images","text":"","category":"section"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"To differentiate 2d arrays of colors from 3d arrays with band as the third dimension:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"For 2D arrays (a single rasterband), if they have a color interpretation, we use the color interpretation. If they don't have a color interpretation, ArchGDAL.jl defaults to \"Grey\".\nFor >2D arrays (multiple rasterbands), if they have a palette interpretation (or combination of color interpretations) that resolves to a valid colortype, ArchGDAL.jl uses the palette interpretation. If they don't have a palette interpretation, we throw an error.","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"In general, read() will return Array{UInt8}, and imread() will return Array{<:Colorant}.","category":"page"},{"location":"considerations/#Tables.jl-Interface","page":"Design Considerations","title":"Tables.jl Interface","text":"","category":"section"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"The interface is implemented in src/tables.jl, and is only for feature and geometries in OGR (and not for images and rasters). The current API from GDAL makes it row-based in the conventions of Tables.jl. Therefore,","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"ArchGDAL.Feature meets the criteria for an AbstractRow based on https://github.com/yeesian/ArchGDAL.jl/blob/a665f3407930b8221269f8949c246db022c3a85c/src/tables.jl#L31-L58.\nArchGDAL.FeatureLayer meets the criteria for an AbstractRow-iterator based on the previous bullet and meeting the criteria for Iteration in base/iterators.jl.\nArchGDAL.AbstractDataset might contain multiple layers, and might correspond to multiple tables. The way to construct tables would be to get the layers before forming the corresponding tables.","category":"page"},{"location":"considerations/#Missing-and-Null-Semantics-in-GDAL","page":"Design Considerations","title":"Missing and Null Semantics in GDAL","text":"","category":"section"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"When reading the fields of a feature using getfield(feature, i), ArchGDAL observes the following behavior:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"Field null notnull\nset missing value\nunset N/A nothing","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"This reflects that","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"a field that is notnull will never return missing: use isfieldnull(feature, i) to determine if a field has been set.\na field is set will never return nothing (and a field that unset will always return nothing): use isfieldset(feature, i) to determine if a field has been set.\na field that is set and not null will always have a concrete value: use isfieldsetandnotnull(feature, i) to test for it.","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"When writing the fields of a feature using setfield!(feature, i, value), ArchGDAL observes the following behavior:","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"Field nullable notnullable\nnothing unset unset\nmissing null getdefault()\nvalue value value","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"This reflects that","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"writing nothing will cause the field to be unset.\nwriting missing will cause the field to be null. In the cause of a notnullable field, it will take the default value (see https://gdal.org/development/rfc/rfc53ogrnotnull_default.html for details). If there is no default value, getdefault() will return nothing, causing the field to be unset.\nwriting a value will behave in the usual manner.","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"For additional references, see","category":"page"},{"location":"considerations/","page":"Design Considerations","title":"Design Considerations","text":"JuliaLang: Nothingness and missing values\nGDAL: OGR not-null constraints and default values\nGDAL: Null values in OGR","category":"page"},{"location":"rasters/#Raster-Data","page":"Raster Data","title":"Raster Data","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"using ArchGDAL; const AG = ArchGDAL","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"In this section, we revisit the gdalworkshop/world.tif dataset.","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"dataset = AG.read(\"gdalworkshop/world.tif\")","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"A description of the display is available in Raster Datasets.","category":"page"},{"location":"rasters/#Raster-Bands","page":"Raster Data","title":"Raster Bands","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"We can examine an individual raster band","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"band = ArchGDAL.getband(dataset, 1)","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"You can programmatically retrieve the information in the header using","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.accessflag(band): the access flag for this band. (GA_ReadOnly)\ncolorinterp =ArchGDAL.getcolorinterp(band): color interpretation of the values in the band (GCI_RedBand)\nArchGDAL.getname(colorinterp): name (string) corresponding to color interpretation (\"Red\")\nArchGDAL.width(band): width (pixels) of the band (2048)\nArchGDAL.height(band): height (pixels) of the band (1024)\nArchGDAL.indexof(band): the index of the band (1+) within its dataset, or 0 if unknown. (1)\nArchGDAL.pixeltype(band): pixel data type for this band. (UInt8)","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"You can get additional attribute information using","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.getscale(band): the scale in units = (px * scale) + offset (1.0)\nArchGDAL.getoffset(band): the offset in units = (px * scale) + offset (0.0)\nArchGDAL.getunittype(band): name for the units, e.g. \"m\" (meters) or \"ft\" (feet). (\"\")\nArchGDAL.getnodatavalue(band): a special marker value used to mark pixels that are not valid data. (-1.0e10)\n(x,y) =ArchGDAL.blocksize(band): the \"natural\" block size of this band ((256,256))","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"note: Note\nGDAL contains a concept of the natural block size of rasters so that applications can organized data access efficiently for some file formats. The natural block size is the block size that is most efficient for accessing the format. For many formats this is simple a whole scanline. However, for tiled images this will typically be the tile size.","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"Finally, you can obtain overviews:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.noverview(band): the number of overview layers available, zero if none. (7)\nArchGDAL.getoverview(band, i): returns the i-th overview in the raster band. Each overview is itself a raster band, e.g.","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.getoverview(band, 2)","category":"page"},{"location":"rasters/#Raster-I/O","page":"Raster Data","title":"Raster I/O","text":"","category":"section"},{"location":"rasters/#Reading-Raster-Values","page":"Raster Data","title":"Reading Raster Values","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"The general operative method for reading in raster values from a dataset or band is to use ArchGDAL.read().","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.read(dataset): reads the entire dataset as a single multidimensional array.\nArchGDAL.read(dataset, indices): reads the raster bands at the indices (in that order) into a multidimensional array.\nArchGDAL.read(dataset, i): reads the i-th raster band into an array.\nArchGDAL.read(band): reads the raster band into an array.","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"note: Note\nThe array returned by read has (cols, rows, bands) dimensions. To convert to a format used by the Images.jl ecosystem, you can either create a view using PermutedDimsArray(A, (3,2,1)) or create a permuted copy using permutedims(A, (3,2,1)). The resulting arrays will have (bands, rows, cols) dimensions.","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"You can also specify the subset of rows and columns (provided as UnitRanges like 2:9) to read:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.read(dataset, indices, rows, cols)\nArchGDAL.read(dataset, i, rows, cols)\nArchGDAL.read(band, rows, cols)","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"On other occasions, it might be easier to first specify a position (xoffset,yoffset) to read from, and the size (xsize, ysize) of the window to read:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.read(dataset, indices, xoffset, yoffset, xsize, ysize)\nArchGDAL.read(dataset, i, xoffset, yoffset, xsize, ysize)\nArchGDAL.read(band, xoffset, yoffset, xsize, ysize)","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"You might have an existing buffer that you wish to read the values into. In such cases, the general API for doing so is to write ArchGDAL.read!(source, buffer, args...) instead of ArchGDAL.read(source, args...).","category":"page"},{"location":"rasters/#Writing-Raster-Values","page":"Raster Data","title":"Writing Raster Values","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"For writing values from a buffer to a raster dataset or band, the following methods are available:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"ArchGDAL.write!(band, buffer)\nArchGDAL.write!(band, buffer, rows, cols)\nArchGDAL.write!(band, buffer, xoffset, yoffset, xsize, ysize)\nArchGDAL.write!(dataset, buffer, i)\nArchGDAL.write!(dataset, buffer, i, rows, cols)\nArchGDAL.write!(dataset, buffer, i, xoffset, yoffset, xsize, ysize)\nArchGDAL.write!(dataset, buffer, indices)\nArchGDAL.write!(dataset, buffer, indices, rows, cols)\nArchGDAL.write!(dataset, buffer, indices, xoffset, yoffset, xsize, ysize)","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"note: Note\nArchGDAL expects the dimensions of the buffer to be (cols, rows, bands) or (cols, rows).","category":"page"},{"location":"rasters/#Windowed-Reads-and-Writes","page":"Raster Data","title":"Windowed Reads and Writes","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"Following the description in mapbox/rasterio's documentation, a window is a view onto a rectangular subset of a raster dataset. This is useful when you want to work on rasters that are larger than your computers RAM or process chunks of large rasters in parallel.","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"For that purpose, we have a method called ArchGDAL.windows(band) which iterates over the windows of a raster band, returning the indices corresponding to the rasterblocks within that raster band for efficiency:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"using Base.Iterators: take # to prevent showing all blocks\nwindows = ArchGDAL.windows(band)\n\nfor (cols, rows) in take(windows, 5)\n @info \"Window\" cols rows\nend","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"Alternatively, we have another method called ArchGDAL.blocks(band) which iterates over the windows of a raster band, returning the offset and size corresponding to the rasterblocks within that raster band for efficiency:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"blocks = ArchGDAL.blocks(band)\nfor (xyoffset, xysize) in take(blocks, 5)\n @info \"Window offset\" xyoffset xysize\nend","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"note: Note\nThese methods are often used for reading/writing a block of image data efficiently, as it accesses \"natural\" blocks from the raster band without resampling, or data type conversion.","category":"page"},{"location":"rasters/#Using-the-DiskArray-interface","page":"Raster Data","title":"Using the DiskArray interface","text":"","category":"section"},{"location":"rasters/#Raster-bands-as-2D-DiskArrays","page":"Raster Data","title":"Raster bands as 2D DiskArrays","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"As of ArchGDAL version 0.5.0 and higher a RasterBand is a subtype of AbstractDiskArray from the DiskArrays.jl package. This means that a RasterBand is also an AbstractArray and can therefore be treated like any Julia array. This means that square bracket indexing works in addition to the read methods described above. ","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"band[1000:1010,300:310]","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"Also, windowed reading of the data can alternatively be done through the DiskArrays interface:","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"using DiskArrays: eachchunk\n# take only the first 3 chunks to decrease output\nusing Base.Iterators: take\nfor (rows, cols) in take(eachchunk(band), 3)\n @info \"window\" rows cols\nend","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"This code is similar to the window function mentioned in Windowed Reads and Writes but more portable because the raster band can be exchanged with any other type implementing the DiskArrays interface. Also, for many operations it will not be necessary anymore to implement the window loop, since the DiskArrays package provides efficient implementations for reductions and lazy broadcasting, so that for example operations like: ","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"sum(sqrt.(band), dims=1)","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"will read the data block by block allocating only the amount of memory in the order of the size of a single raster block. See the DiskArrays README for more information on DiskArrays.jl","category":"page"},{"location":"rasters/#The-RasterDataset-type","page":"Raster Data","title":"The RasterDataset type","text":"","category":"section"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"Many raster datasets that contain multiple bands of the same size and data type can also be abstracted as a 3D array where the last dimension represents the band index. In order to open a raster dataset in a way that it is represented as a 3D AbstractArray there is the readraster funtion. It returns a RasterDataset which is a thin wrapper around a Dataset but it is a subtype of AbstractDiskArray{T,3} and therefore part of the array hierarchy. ","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"This means that data can be accessed with the square-bracket syntax","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"dataset = AG.readraster(\"gdalworkshop/world.tif\")\ndataset[1000,300,:]","category":"page"},{"location":"rasters/","page":"Raster Data","title":"Raster Data","text":"and broadcasting, views and reductions are provided by the DiskArrays package. In addition, many ArchGDAL functions like (getband, nraster, getgeotransform, etc) are delegated to the wrapped Dataset and work for RasterDatasets as well. ","category":"page"},{"location":"features/#Feature-Data","page":"Feature Data","title":"Feature Data","text":"","category":"section"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"using ArchGDAL","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"In this section, we revisit the data/point.geojson dataset.","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"dataset = ArchGDAL.read(\"data/point.geojson\")","category":"page"},{"location":"features/#Feature-Layers","page":"Feature Data","title":"Feature Layers","text":"","category":"section"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"Retrieve a layer from a dataset using ArchGDAL.getlayer","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"layer = ArchGDAL.getlayer(dataset, 0)","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"The display provides","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"the name of the feature layer (point)\nthe geometries in the dataset, and their brief summary.\nthe fields in the dataset, and their brief summary.","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"You can also programmatically retrieve them using","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"ArchGDAL.getname(layer): the name of the feature layer\nArchGDAL.nfeature(layer): the number of features in the layer\nfeaturedefn =ArchGDAL.layerdefn(layer): the schema of the layer features\nArchGDAL.nfield(featuredefn): the number of fields\nArchGDAL.ngeom(featuredefn): the number of geometries\nArchGDAL.getfielddefn(featuredefn, i): the definition for the i-th field\nArchGDAL.getgeomdefn(featuredefn, i): the definition for the i-th geometry","category":"page"},{"location":"features/#Field-Definitions","page":"Feature Data","title":"Field Definitions","text":"","category":"section"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"Each fielddefn defines an attribute of a feature, and supports the following:","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"ArchGDAL.getname(fielddefn): the name of the field (\"FID\" or \"pointname\")\nArchGDAL.gettype(fielddefn): the type of the field (OFTReal or OFTString)","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"Each geomdefn defines an attribute of a geometry, and supports the following:","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"ArchGDAL.getname(geomdefn): the name of the geometry (\"\" in this case)\nArchGDAL.gettype(geomdefn): the type of the geometry (wkbPoint)","category":"page"},{"location":"features/#Individual-Features","page":"Feature Data","title":"Individual Features","text":"","category":"section"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"We can examine an individual feature","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"ArchGDAL.getfeature(layer, 2) do feature\n print(feature)\nend","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"You can programmatically retrieve the information using","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"ArchGDAL.nfield(feature): the number of fields (2)\nArchGDAL.ngeom(feature): the number of geometries (1)\nArchGDAL.getfield(feature, i): the i-th field (0.0 and \"a\")\nArchGDAL.getgeom(feature, i): the i-th geometry (the WKT display POINT)","category":"page"},{"location":"features/","page":"Feature Data","title":"Feature Data","text":"More information on geometries can be found in Geometric Operations.","category":"page"},{"location":"images/#Images","page":"Working with Images","title":"Images","text":"","category":"section"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"using ArchGDAL","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"In this section, we revisit the gdalworkshop/world.tif dataset.","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"dataset = ArchGDAL.read(\"gdalworkshop/world.tif\")","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"A description of the display is available in Raster Datasets.","category":"page"},{"location":"images/#Reading-from-Datasets","page":"Working with Images","title":"Reading from Datasets","text":"","category":"section"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"We can construct an image from it in the following way:","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(dataset)","category":"page"},{"location":"images/#Reading-from-Files","page":"Working with Images","title":"Reading from Files","text":"","category":"section"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"We can read the file as an image instead:","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(\"gdalworkshop/world.tif\")","category":"page"},{"location":"images/#Reading-from-Rasterbands","page":"Working with Images","title":"Reading from Rasterbands","text":"","category":"section"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"We can also read from individual raster bands:","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(ArchGDAL.getband(dataset, 1))","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"Or equivalently,","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(dataset, 1)","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"It will interpret the color channel (for RGB) correctly if there is one. E.g.","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(dataset, 2)","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"and","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(dataset, 3)","category":"page"},{"location":"images/#Working-with-Colors","page":"Working with Images","title":"Working with Colors","text":"","category":"section"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"Operations on colors behave as you think they might:","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"ArchGDAL.imread(dataset, 2) + ArchGDAL.imread(dataset, 3)","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"and","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"0.5 * ArchGDAL.imread(dataset, 1) + ArchGDAL.imread(dataset, 3)","category":"page"},{"location":"images/","page":"Working with Images","title":"Working with Images","text":"See Colors.jl for more on what you can do.","category":"page"},{"location":"reference/#API-Reference","page":"API Reference","title":"API Reference","text":"","category":"section"},{"location":"reference/#General","page":"API Reference","title":"General","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"ArchGDAL.jl\", \"display.jl\", \"iterators.jl\", \"types.jl\", \"utils.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.arecompatible-Tuple{ArchGDAL.OGRFieldType, ArchGDAL.OGRFieldSubType}","page":"API Reference","title":"ArchGDAL.arecompatible","text":"arecompatible(dtype::OGRFieldType, subtype::OGRFieldSubType)\n\nReturn if type and subtype are compatible.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc50ogrfield_subtype.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asyncstatustype-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.asyncstatustype","text":"asyncstatustype(name::AbstractString)\n\nGet AsyncStatusType by symbolic name.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.colorinterp-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.colorinterp","text":"colorinterp(name::AbstractString)\n\nGet color interpretation corresponding to the given symbolic name.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.GDALAsyncStatusType}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(dtype::GDALAsyncStatusType)\n\nGet name of AsyncStatus data type.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.GDALColorInterp}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(obj::GDALColorInterp)\n\nReturn name (string) corresponding to color interpretation.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.GDALPaletteInterp}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(obj::GDALPaletteInterp)\n\nGet name of palette interpretation.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.OGRFieldSubType}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(obj::OGRFieldSubType)\n\nFetch human readable name for a field subtype.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc50ogrfield_subtype.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.OGRFieldType}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(obj::OGRFieldType)\n\nFetch human readable name for a field type.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.gettype-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.gettype","text":"gettype(name::AbstractString)\n\nReturns GDAL data type by symbolic name.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.iscomplex-Tuple{ArchGDAL.GDALDataType}","page":"API Reference","title":"ArchGDAL.iscomplex","text":"iscomplex(dtype::GDALDataType)\n\ntrue if dtype is one of GDT_{CInt16|CInt32|CFloat32|CFloat64}.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.pixeltype-Tuple{Ptr{Nothing}}","page":"API Reference","title":"ArchGDAL.pixeltype","text":"Fetch the pixel data type for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.typename-Tuple{ArchGDAL.GDALDataType}","page":"API Reference","title":"ArchGDAL.typename","text":"typename(dt::GDALDataType)\n\nname (string) corresponding to GDAL data type.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.typesize-Tuple{ArchGDAL.GDALDataType}","page":"API Reference","title":"ArchGDAL.typesize","text":"typesize(dt::GDALDataType)\n\nGet the number of bits or zero if it is not recognised.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.typeunion-Tuple{ArchGDAL.GDALDataType, ArchGDAL.GDALDataType}","page":"API Reference","title":"ArchGDAL.typeunion","text":"typeunion(dt1::GDALDataType, dt2::GDALDataType)\n\nReturn the smallest data type that can fully express both input data types.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL._dummyprogress","page":"API Reference","title":"ArchGDAL._dummyprogress","text":"Default progress function, which logs no progress. A progress function should return true to continue, or false to abort.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL._progresscallback-Tuple{Float64, Cstring, Ptr{Nothing}}","page":"API Reference","title":"ArchGDAL._progresscallback","text":"_progresscallback(dfComplete::Cdouble, pszMessage::Cstring, pProgressArg::Ptr{Cvoid})::Cint\n\nThe progress callback function to be passed to GDAL. Users can provide their own progress function by passing a function of the form f(dfComplete::Cdouble, pszMessage::Cstring)::Bool to the progressfunc keyword argument of the functions that implement it, which should be wrapped in a Ref.\n\nIn essence, we pass a pointer to the (user-provided) progress function to GDAL, and GDAL passes it back to us, including the progress ratio and message. We then call the user-provided function with these arguments.\n\nParameters\n\ndfComplete – completion ratio from 0.0 to 1.0.\npszMessage – optional message (made available as an argument to the user-defined progress function).\npProgressArg – callback data argument (i.e. user-defined progress function, see _dummyprogress).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.clearconfigoption-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.clearconfigoption","text":"clearconfigoption(option::AbstractString)\n\nThis function can be used to clear a setting.\n\nNote: it will not unset an existing environment variable; it will just unset a value previously set by setconfigoption().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.clearthreadconfigoption-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.clearthreadconfigoption","text":"clearthreadconfigoption(option::AbstractString)\n\nThis function can be used to clear a setting.\n\nNote: it will not unset an existing environment variable; it will just unset a value previously set by setthreadconfigoption().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getconfigoption","page":"API Reference","title":"ArchGDAL.getconfigoption","text":"getconfigoption(option::AbstractString, default = C_NULL)\n\nGet the value of a configuration option.\n\nThe value is the value of a (key, value) option set with setconfigoption(). If the given option was not defined with setconfigoption(), it tries to find it in environment variables.\n\nParameters\n\noption the key of the option to retrieve\ndefault a default value if the key does not match existing defined options\n\nReturns\n\nthe value associated to the key, or the default value if not found.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.getthreadconfigoption","page":"API Reference","title":"ArchGDAL.getthreadconfigoption","text":"getthreadconfigoption(option::AbstractString, default = C_NULL)\n\nSame as getconfigoption() but with settings from setthreadconfigoption().\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.metadata-Tuple{Any}","page":"API Reference","title":"ArchGDAL.metadata","text":"metadata(obj; domain::AbstractString = \"\")\n\nFetch metadata. Note that relatively few formats return any metadata.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.metadatadomainlist-Tuple{Any}","page":"API Reference","title":"ArchGDAL.metadatadomainlist","text":"metadatadomainlist(obj)\n\nFetch list of (non-empty) metadata domains.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.metadataitem-Tuple{Any, AbstractString}","page":"API Reference","title":"ArchGDAL.metadataitem","text":"metadataitem(obj, name::AbstractString, domain::AbstractString)\n\nFetch single metadata item.\n\nParameters\n\nname the name of the metadata item to fetch.\ndomain (optional) the domain to fetch for.\n\nReturns\n\nThe metadata item on success, or an empty string on failure.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setconfigoption-Tuple{AbstractString, Any}","page":"API Reference","title":"ArchGDAL.setconfigoption","text":"setconfigoption(option::AbstractString, value)\n\nSet a configuration option for GDAL/OGR use.\n\nThose options are defined as a (key, value) couple. The value corresponding to a key can be got later with the getconfigoption() method.\n\nParameters\n\noption the key of the option\nvalue the value of the option, or NULL to clear a setting.\n\nThis mechanism is similar to environment variables, but options set with setconfigoption() overrides, for getconfigoption() point of view, values defined in the environment.\n\nIf setconfigoption() is called several times with the same key, the value provided during the last call will be used.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setthreadconfigoption-Tuple{AbstractString, Any}","page":"API Reference","title":"ArchGDAL.setthreadconfigoption","text":"setthreadconfigoption(option::AbstractString, value)\n\nSet a configuration option for GDAL/OGR use.\n\nThose options are defined as a (key, value) couple. The value corresponding to a key can be got later with the getconfigoption() method.\n\nParameters\n\noption the key of the option\nvalue the value of the option\n\nThis function sets the configuration option that only applies in the current thread, as opposed to setconfigoption() which sets an option that applies on all threads.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.@convert-Tuple","page":"API Reference","title":"ArchGDAL.@convert","text":"@convert(::,\n \n)\n\nGenerate convert functions both ways between ArchGDAL Enum of typeids (e.g. ArchGDAL.OGRFieldType) and other types or typeids.\n\nArchGDAL uses Enum types, listing typeids of various data container used in GDAL/OGR object model. Some of these types are used to implement concrete types in julia through parametric composite types based on those Enum of typeids (e.g. Geometry and IGeometry types with OGRwkbGeometryType)\n\nOther types or typeids can be:\n\nGDAL CEnum.Cenum typeids (e.g. GDAL.OGRFieldType),\nBase primitive DataType types (e.g. Bool),\nother parametric composite types (e.g. ImageCore.Normed)\n\nArguments\n\n(::)::Expr: source and target supertypes, where T1<:Enum and T2<:CEnum.Cenum || T2::Type{DataType} || T2::UnionAll}`\n(::)::Expr: source and target subtypes or type ids with stype1::T1 and\nstype2::T2 where T2<:CEnum.Cenum or\nstype2::T2 where T2::Type{DataType} or\nstype2<:T2where T2<:UnionAll\n...\n\nNote: In the case where the mapping is not bijective, the last declared typeid of subtype is used. Example:\n\n@convert(\n OGRFieldType::DataType,\n OFTInteger::Bool,\n OFTInteger::Int16,\n OFTInteger::Int32,\n)\n\nwill generate a convert functions giving:\n\nInt32 type for OFTInteger and not Ìnt16\nOFTInteger OGRFieldType typeid for both Int16 and Int32\n\nUsage\n\nGeneral case:\n\n@convert(GDALRWFlag::GDAL.GDALRWFlag,\n GF_Read::GDAL.GF_Read,\n GF_Write::GDAL.GF_Write,\n)\n\ndoes the equivalent of\n\nconst GDALRWFlag_to_GDALRWFlag_map = ImmutableDict(\n GF_Read => GDAL.GF_Read,\n GF_Write => GDAL.GF_Write\n)\nBase.convert(::Type{GDAL.GDALRWFlag}, ft::GDALRWFlag) =\n GDALRWFlag_to_GDALRWFlag_map[ft]\n\nconst GDALRWFlag_to_GDALRWFlag_map = ImmutableDict(\n GDAL.GF_Read => GF_Read,\n GDAL.GF_Write => GF_Write\n)\nBase.convert(::Type{GDALRWFlag}, ft::GDAL.GDALRWFlag) =\n GDALRWFlag_to_GDALRWFlag_map[ft]\n\nCase where 1st type <: Enum and 2nd type == DataType or ìsa UnionAll:\n\n@convert(OGRFieldType::DataType,\n OFTInteger::Bool,\n OFTInteger::Int16,\n)\n\ndoes the equivalent of\n\nconst OGRFieldType_to_DataType_map = ImmutableDict(\n OFTInteger => Bool,\n OFTInteger => Int16,\n)\nBase.convert(::Type{DataType}, ft::OGRFieldType) =\n OGRFieldType_to_DataType_map[ft]\n\nBase.convert(::Type{OGRFieldType}, ft::Type{Bool}) = OFTInteger\nBase.convert(::Type{OGRFieldType}, ft::Type{Int16}) = OFTInteger\n\n\n\n\n\n","category":"macro"},{"location":"reference/#API-GDAL-Constants","page":"API Reference","title":"GDAL Constants","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"constants.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.GDALAccess","page":"API Reference","title":"ArchGDAL.GDALAccess","text":"The value of GDALAccess could be different from GDAL.GDALAccess.\n\nIt maps correctly to GDAL.GDALAccess if you do e.g.\n\nconvert(GDAL.GDALAccess, ArchGDAL.GA_ReadOnly)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALAsyncStatusType","page":"API Reference","title":"ArchGDAL.GDALAsyncStatusType","text":"The value of GDALAsyncStatusType could be different from GDAL.GDALAsyncStatusType.\n\nIt maps correctly to GDAL.GDALAsyncStatusType if you do e.g.\n\nconvert(GDAL.GDALAsyncStatusType, ArchGDAL.GARIO_PENDING)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALColorInterp","page":"API Reference","title":"ArchGDAL.GDALColorInterp","text":"The value of GDALColorInterp could be different from GDAL.GDALColorInterp.\n\nIt maps correctly to GDAL.GDALColorInterp if you do e.g.\n\nconvert(GDAL.GDALColorInterp, ArchGDAL.GCI_Undefined)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALDataType","page":"API Reference","title":"ArchGDAL.GDALDataType","text":"The value of GDALDataType could be different from GDAL.GDALDataType.\n\nIt maps correctly to GDAL.GDALDataType if you do e.g.\n\nconvert(GDAL.GDALDataType, ArchGDAL.GDT_Unknown)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALPaletteInterp","page":"API Reference","title":"ArchGDAL.GDALPaletteInterp","text":"The value of GDALPaletteInterp could be different from GDAL.GDALPaletteInterp.\n\nIt maps correctly to GDAL.GDALPaletteInterp if you do e.g.\n\nconvert(GDAL.GDALPaletteInterp, ArchGDAL.GPI_Gray)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALRATFieldType","page":"API Reference","title":"ArchGDAL.GDALRATFieldType","text":"The value of GDALRATFieldType could be different from GDAL.GDALRATFieldType.\n\nIt maps correctly to GDAL.GDALRATFieldType if you do e.g.\n\nconvert(GDAL.GDALRATFieldType, ArchGDAL.GFT_Integer)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALRATFieldUsage","page":"API Reference","title":"ArchGDAL.GDALRATFieldUsage","text":"The value of GDALRATFieldUsage could be different from GDAL.GDALRATFieldUsage.\n\nIt maps correctly to GDAL.GDALRATFieldUsage if you do e.g.\n\nconvert(GDAL.GDALRATFieldUsage, ArchGDAL.GFU_Generic)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.GDALRWFlag","page":"API Reference","title":"ArchGDAL.GDALRWFlag","text":"The value of GDALRWFlag could be different from GDAL.GDALRWFlag.\n\nIt maps correctly to GDAL.GDALRWFlag if you do e.g.\n\nconvert(GDAL.GDALRWFlag, ArchGDAL.GF_Read)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRFieldSubType","page":"API Reference","title":"ArchGDAL.OGRFieldSubType","text":"The value of OGRFieldSubType could be different from GDAL.OGRFieldSubType.\n\nIt maps correctly to GDAL.OGRFieldSubType if you do e.g.\n\nconvert(GDAL.OGRFieldSubType, ArchGDAL.OFSTNone)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRFieldType","page":"API Reference","title":"ArchGDAL.OGRFieldType","text":"The value of OGRFieldType could be different from GDAL.OGRFieldType.\n\nIt maps correctly to GDAL.OGRFieldType if you do e.g.\n\nconvert(GDAL.OGRFieldType, ArchGDAL.OFTInteger)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRJustification","page":"API Reference","title":"ArchGDAL.OGRJustification","text":"The value of OGRJustification could be different from GDAL.OGRJustification.\n\nIt maps correctly to GDAL.OGRJustification if you do e.g.\n\nconvert(GDAL.OGRJustification, ArchGDAL.OJUndefined)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRSTClassId","page":"API Reference","title":"ArchGDAL.OGRSTClassId","text":"The value of OGRSTClassId could be different from GDAL.OGRSTClassId.\n\nIt maps correctly to GDAL.OGRSTClassId if you do e.g.\n\nconvert(GDAL.OGRSTClassId, ArchGDAL.OGRSTCNone)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRSTUnitId","page":"API Reference","title":"ArchGDAL.OGRSTUnitId","text":"The value of OGRSTUnitId could be different from GDAL.OGRSTUnitId.\n\nIt maps correctly to GDAL.OGRSTUnitId if you do e.g.\n\nconvert(GDAL.OGRSTUnitId, ArchGDAL.OGRSTUGround)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRwkbByteOrder","page":"API Reference","title":"ArchGDAL.OGRwkbByteOrder","text":"The value of OGRwkbByteOrder could be different from GDAL.OGRwkbByteOrder.\n\nIt maps correctly to GDAL.OGRwkbByteOrder if you do e.g.\n\nconvert(GDAL.OGRwkbByteOrder, ArchGDAL.wkbXDR)\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL.OGRwkbGeometryType","page":"API Reference","title":"ArchGDAL.OGRwkbGeometryType","text":"The value of OGRwkbGeometryType could be different from GDAL.OGRwkbGeometryType.\n\nIt maps correctly to GDAL.OGRwkbGeometryType if you do e.g.\n\nconvert(GDAL.OGRwkbGeometryType, ArchGDAL.wkbUnknown)\n\n\n\n\n\n","category":"type"},{"location":"reference/#API-GDAL-Datasets","page":"API Reference","title":"GDAL Datasets","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"dataset.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.buildoverviews!-Union{Tuple{T}, Tuple{T, Vector{Int32}}} where T<:ArchGDAL.AbstractDataset","page":"API Reference","title":"ArchGDAL.buildoverviews!","text":"buildoverviews!(dataset::AbstractDataset, overviewlist::Vector{Cint};\n bandlist, resampling=\"NEAREST\", progressfunc)\n\nBuild raster overview(s).\n\nIf the operation is unsupported for the indicated dataset, then CEFailure is returned, and CPLGetLastErrorNo() will return CPLENotSupported.\n\nParameters\n\noverviewlist overview decimation factors to build.\n\nKeyword Parameters\n\npanBandList list of band numbers. Must be in Cint (default = all)\nsampling one of \"NEAREST\" (default), \"GAUSS\",\"CUBIC\",\"AVERAGE\",\"MODE\", \"AVERAGE_MAGPHASE\" or \"NONE\" controlling the downsampling method applied.\nprogressfunc a function(::Float64, ::String)::Bool to call to report progress\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.copy-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.copy","text":"copy(dataset::AbstractDataset; [filename, [driver, []]])\n\nCreate a copy of a dataset.\n\nThis method will attempt to create a copy of a raster dataset with the indicated filename, and in this drivers format. Band number, size, type, projection, geotransform and so forth are all to be copied from the provided template dataset.\n\nParameters\n\ndataset the dataset being duplicated.\n\nKeyword Arguments\n\nfilename the filename for the new dataset. UTF-8 encoded.\ndriver the driver to use for creating the new dataset\nstrict true if the copy must be strictly equivalent, or more normally false if the copy may adapt as needed for the output format.\noptions additional format dependent options controlling creation of the output file. The APPEND_SUBDATASET=YES option can be specified to avoid prior destruction of existing dataset.\nprogressfunc a function(::Float64, ::String)::Bool to call to report progress\n\nExample\n\ndataset = ArchGDAL.copy(originaldataset)\n# work with dataset from here\n\nor\n\nArchGDAL.copy(originaldataset) do dataset\n # work with dataset from here\nend\n\nReturns\n\nThe newly created dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.copylayers!-Tuple{ArchGDAL.AbstractDataset, ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.copylayers!","text":"copylayers!(source_dataset, target_dataset; kwargs...)\n\nCopies a (sub)set of layers from source to target dataset. Note that eventual layer options have to conform with the target dataset driver.\n\nCurrently working drivers: FlatGeobuf, GeoJSON, GeoJSONSeq, GML, GPKG, JML, KML, MapML, ESRI Shapefile, SQLite\n\nKeyword arguments\n\ndriver: The driver to use, you have to manually select the right driver for the file extension you wish\noptions: A vector of strings containing KEY=VALUE pairs for driver-specific creation options\nsource_layer_indices: Specifies which layers should be written. Can be e.g. a range, Vector{Int} or tuple.\nlayer_options: Driver specific options for layer creation. The options can either be a Vector{String} to provide the same options for each layer, or a Dict(layer_index => Vector{String}) to provide individual options per layer. Note that layer indexing in GDAL starts with 0. The strings have to be KEY=VALUE pairs. An example for two layers: Dict(0 => [\"FORMAT=WKT\", \"LAUNDER=NO\"], 1 => [\"STRICT=NO\"])\nchunksize: Number of features to write in one database transaction. Neglected when use_gdal_copy is true.\nuse_gdal_copy: Set this to false (default is true) to achieve higher write speeds at the cost of possible errors. Note that when set to true, no coordinate transformations are possible while writing the features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.copywholeraster!-Union{Tuple{D}, Tuple{ArchGDAL.AbstractDataset, D}} where D<:ArchGDAL.AbstractDataset","page":"API Reference","title":"ArchGDAL.copywholeraster!","text":"copywholeraster(source::AbstractDataset, dest::AbstractDataset;\n options::StringList, progressfunc::Function)\n\nCopy all dataset raster data.\n\nThis function copies the complete raster contents of one dataset to another similarly configured dataset. The source and destination dataset must have the same number of bands, and the same width and height. The bands do not have to have the same data type.\n\nCurrently the only options supported are : \"INTERLEAVE=PIXEL\" to force pixel interleaved operation and \"COMPRESSED=YES\" to force alignment on target dataset block sizes to achieve best compression. More options may be supported in the future.\n\nFor progress reporting one can pass progressfunc function(::Float64, ::String)::Bool to call to report progress.\n\nAdditional Remarks\n\nThis function is primarily intended to support implementation of driver specific createcopy() functions. It implements efficient copying, in particular \"chunking\" the copy in substantial blocks and, if appropriate, performing the transfer in a pixel interleaved fashion.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.create-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.create","text":"create(filename::AbstractString; driver, width, height, nbands, dtype,\n options)\n\nCreate a new dataset.\n\nParameters\n\nfilename the filename for the dataset being created.\n\nKeyword Arguments\n\ndriver the driver to use for creating the new dataset\noptions additional format dependent options controlling creation\n\nof the output file. The APPEND_SUBDATASET=YES option can be specified to avoid prior destruction of existing dataset.\n\nwidth, height, nbands, dtype: only for raster datasets.\n\nExample\n\ndataset = ArchGDAL.create(filename; ...)\n# work with raster dataset from here\n\nor\n\nArchGDAL.create(filename; ...) do dataset\n # work with vector dataset from here\nend\n\nReturns\n\nThe newly created dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.deletelayer!-Union{Tuple{T}, Tuple{T, Integer}} where T<:ArchGDAL.AbstractDataset","page":"API Reference","title":"ArchGDAL.deletelayer!","text":"deletelayer!(dataset::AbstractDataset, i::Integer)\n\nDelete the indicated layer (at index i; between 0 to nlayer()-1)\n\nReturns\n\nOGRERR_NONE on success, or OGRERR_UNSUPPORTED_OPERATION if deleting layers is not supported for this dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.filelist-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.filelist","text":"filelist(dataset::AbstractDataset)\n\nFetch files forming dataset.\n\nReturns a list of files believed to be part of this dataset. If it returns an empty list of files it means there is believed to be no local file system files associated with the dataset (for instance a virtual dataset). The returned file list is owned by the caller and should be deallocated with CSLDestroy().\n\nThe returned filenames will normally be relative or absolute paths depending on the path used to originally open the dataset. The strings will be UTF-8 encoded\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getband-Tuple{ArchGDAL.AbstractDataset, Integer}","page":"API Reference","title":"ArchGDAL.getband","text":"getband(dataset::AbstractDataset, i::Integer)\ngetband(ds::RasterDataset, i::Integer)\n\nFetch a band object for a dataset from its index.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getdriver-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.getdriver","text":"getdriver(dataset::AbstractDataset)\n\nFetch the driver that the dataset was created with\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeotransform!-Tuple{ArchGDAL.AbstractDataset, Vector{Float64}}","page":"API Reference","title":"ArchGDAL.getgeotransform!","text":"getgeotransform!(dataset::AbstractDataset, transform::Vector{Cdouble})\n\nFetch the affine transformation coefficients.\n\nFetches the coefficients for transforming between pixel/line (P,L) raster space, and projection coordinates (Xp,Yp) space.\n\n Xp = padfTransform[0] + P*padfTransform[1] + L*padfTransform[2];\n Yp = padfTransform[3] + P*padfTransform[4] + L*padfTransform[5];\n\nIn a north up image, padfTransform[1] is the pixel width, and padfTransform[5] is the pixel height. The upper left corner of the upper left pixel is at position (padfTransform[0],padfTransform[3]).\n\nThe default transform is (0,1,0,0,0,1) and should be returned even when a CE_Failure error is returned, such as for formats that don't support transformation to projection coordinates.\n\nParameters\n\nbuffer a six double buffer into which the transformation will be placed.\n\nReturns\n\nCE_None on success, or CE_Failure if no transform can be fetched.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getlayer-Tuple{ArchGDAL.AbstractDataset, AbstractString}","page":"API Reference","title":"ArchGDAL.getlayer","text":"getlayer(dataset::AbstractDataset, name::AbstractString)\n\nFetch the feature layer corresponding to the given name\n\nThe returned layer remains owned by the dataset and should not be deleted by the application.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getlayer-Tuple{ArchGDAL.AbstractDataset, Integer}","page":"API Reference","title":"ArchGDAL.getlayer","text":"getlayer(dataset::AbstractDataset, i::Integer)\n\nFetch the layer at index i (between 0 and nlayer(dataset)-1)\n\nThe returned layer remains owned by the dataset and should not be deleted by the application.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getlayer-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.getlayer","text":"getlayer(dataset::AbstractDataset)\n\nFetch the first layer and raise an error if dataset contains more than one layer\n\nThe returned layer remains owned by the dataset and should not be deleted by the application.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getproj-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.getproj","text":"getproj(dataset::AbstractDataset)\n\nFetch the projection definition string for this dataset in OpenGIS WKT format.\n\nIt should be suitable for use with the OGRSpatialReference class. When a projection definition is not available an empty (but not NULL) string is returned.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.height-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.height","text":"height(dataset::AbstractDataset)\n\nFetch raster height in pixels.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ngcp-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.ngcp","text":"ngcp(dataset::AbstractDataset)\n\nGet number of GCPs for this dataset. Zero if there are none.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nlayer-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.nlayer","text":"nlayer(dataset::AbstractDataset)\n\nFetch the number of feature layers on this dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nraster-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.nraster","text":"nraster(dataset::AbstractDataset)\n\nFetch the number of raster bands on this dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.pixeltype-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.pixeltype","text":"pixeltype(ds::AbstractDataset)\n\nTries to determine a common dataset type for all the bands in a raster dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.read-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.read","text":"read(filename; flags=OF_READONLY, alloweddrivers, options, siblingfiles)\n\nOpen a raster file\n\nParameters\n\nfilename: the filename of the dataset to be read.\n\nKeyword Arguments\n\nflags: a combination of OF_* flags (listed below) that may be combined through the logical | operator. It defaults to OF_READONLY.\nDriver kind: OF_Raster for raster drivers, OF_Vector for vector drivers. If none of the value is specified, both are implied.\nAccess mode: OF_READONLY (exclusive) or OF_UPDATE.\nShared mode: OF_Shared. If set, it allows the sharing of handles for a dataset with other callers that have set OF_Shared.\nVerbose error: OF_VERBOSE_ERROR. If set, a failed attempt to open the file will lead to an error message to be reported.\noptions: additional format dependent options.\n\nExample\n\ndataset = ArchGDAL.read(\"point.shp\")\n# work with dataset from here\n\nor\n\nArchGDAL.read(\"point.shp\") do dataset\n # work with dataset from here\nend\n\nReturns\n\nThe corresponding dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.releaseresultset-Tuple{ArchGDAL.AbstractDataset, ArchGDAL.FeatureLayer}","page":"API Reference","title":"ArchGDAL.releaseresultset","text":"releaseresultset(dataset::AbstractDataset, layer::FeatureLayer)\n\nRelease results of ExecuteSQL().\n\nThis function should only be used to deallocate OGRLayers resulting from an ExecuteSQL() call on the same Dataset. Failure to deallocate a results set before destroying the Dataset may cause errors.\n\nParameters\n\ndataset: the dataset handle.\nlayer: the result of a previous ExecuteSQL() call.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setgeotransform!-Union{Tuple{T}, Tuple{T, Vector{Float64}}} where T<:ArchGDAL.AbstractDataset","page":"API Reference","title":"ArchGDAL.setgeotransform!","text":"setgeotransform!(dataset::AbstractDataset, transform::Vector{Cdouble})\n\nSet the affine transformation coefficients.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setproj!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractDataset","page":"API Reference","title":"ArchGDAL.setproj!","text":"setproj!(dataset::AbstractDataset, projstring::AbstractString)\n\nSet the projection reference string for this dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.testcapability-Tuple{ArchGDAL.AbstractDataset, AbstractString}","page":"API Reference","title":"ArchGDAL.testcapability","text":"testcapability(dataset::AbstractDataset, capability::AbstractString)\n\nTest if capability is available. true if capability available otherwise false.\n\nOne of the following dataset capability names can be passed into this function, and a true or false value will be returned indicating whether or not the capability is available for this object.\n\nODsCCreateLayer: True if this datasource can create new layers.\nODsCDeleteLayer: True if this datasource can delete existing layers.\nODsCCreateGeomFieldAfterCreateLayer: True if the layers of this datasource support CreateGeomField() just after layer creation.\nODsCCurveGeometries: True if this datasource supports curve geometries.\nODsCTransactions: True if this datasource supports (efficient) transactions.\nODsCEmulatedTransactions: True if this datasource supports transactions through emulation.\n\nThe #define macro forms of the capability names should be used in preference to the strings themselves to avoid misspelling.\n\nParameters\n\ndataset: the dataset handle.\ncapability: the capability to test.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_copy-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.unsafe_copy","text":"unsafe_copy(dataset::AbstractDataset; [filename, [driver,\n []]])\n\nCreate a copy of a dataset.\n\nThis method will attempt to create a copy of a raster dataset with the indicated filename, and in this drivers format. Band number, size, type, projection, geotransform and so forth are all to be copied from the provided template dataset.\n\nParameters\n\ndataset the dataset being duplicated.\n\nKeyword Arguments\n\nfilename the filename for the new dataset. UTF-8 encoded.\ndriver the driver to use for creating the new dataset\nstrict true if the copy must be strictly equivalent, or more normally false if the copy may adapt as needed for the output format.\noptions additional format dependent options controlling creation of the output file. The APPEND_SUBDATASET=YES option can be specified to avoid prior destruction of existing dataset.\nprogressfunc a function(::Float64, ::String)::Bool to call to report progress\n\nReturns\n\na pointer to the newly created dataset (may be read-only access).\n\nAdditional Remarks\n\nNote: many sequential write once formats (such as JPEG and PNG) don't implement the Create() method but do implement this CreateCopy() method. If the driver doesn't implement CreateCopy(), but does implement Create() then the default CreateCopy() mechanism built on calling Create() will be used.\n\nIt is intended that CreateCopy() will often be used with a source dataset which is a virtual dataset allowing configuration of band types, and other information without actually duplicating raster data (see the VRT driver). This is what is done by the gdal_translate utility for example.\n\nThis function will validate the creation option list passed to the driver with the GDALValidateCreationOptions() method. This check can be disabled by defining the configuration option GDAL_VALIDATE_CREATION_OPTIONS=NO.\n\nAfter you have finished working with the returned dataset, it is required to close it with GDALClose(). This does not only close the file handle, but also ensures that all the data and metadata has been written to the dataset (GDALFlushCache() is not sufficient for that purpose).\n\nIn some situations, the new dataset can be created in another process through the GDAL API Proxy mechanism.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_create-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.unsafe_create","text":"unsafe_create(filename::AbstractString; driver, width, height, nbands,\n dtype, options)\n\nCreate a new dataset.\n\nWhat argument values are legal for particular drivers is driver specific, and there is no way to query in advance to establish legal values.\n\nThat function will try to validate the creation option list passed to the driver with the GDALValidateCreationOptions() method. This check can be disabled by defining the configuration option GDALVALIDATECREATION_OPTIONS=NO.\n\nAfter you have finished working with the returned dataset, it is required to close it with GDALClose(). This does not only close the file handle, but also ensures that all the data and metadata has been written to the dataset (GDALFlushCache() is not sufficient for that purpose).\n\nIn some situations, the new dataset can be created in another process through the GDAL API Proxy mechanism.\n\nIn GDAL 2, the arguments nXSize, nYSize and nBands can be passed to 0 when creating a vector-only dataset for a compatible driver.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_executesql-Tuple{ArchGDAL.AbstractDataset, AbstractString}","page":"API Reference","title":"ArchGDAL.unsafe_executesql","text":"unsafe_executesql(dataset::AbstractDataset, query::AbstractString; dialect,\n spatialfilter)\n\nExecute an SQL statement against the data store.\n\nThe result of an SQL query is either NULL for statements that are in error, or that have no results set, or an OGRLayer pointer representing a results set from the query. Note that this OGRLayer is in addition to the layers in the data store and must be destroyed with ReleaseResultSet() before the dataset is closed (destroyed).\n\nFor more information on the SQL dialect supported internally by OGR review the OGR SQL document. Some drivers (i.e. Oracle and PostGIS) pass the SQL directly through to the underlying RDBMS.\n\nStarting with OGR 1.10, the SQLITE dialect can also be used.\n\nParameters\n\ndataset: the dataset handle.\nquery: the SQL statement to execute.\nspatialfilter: geometry which represents a spatial filter. Can be NULL.\ndialect: allows control of the statement dialect. If set to NULL, the OGR SQL engine will be used, except for RDBMS drivers that will use their dedicated SQL engine, unless OGRSQL is explicitly passed as the dialect. Starting with OGR 1.10, the SQLITE dialect can also be used.\n\nReturns\n\nan OGRLayer containing the results of the query. Deallocate with ReleaseResultSet().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_read-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.unsafe_read","text":"unsafe_read(filename; flags=OF_READONLY, alloweddrivers, options,\n siblingfiles)\n\nOpen a raster file as a Dataset.\n\nThis function will try to open the passed file, or virtual dataset name by invoking the Open method of each registered Driver in turn. The first successful open will result in a returned dataset. If all drivers fail then NULL is returned and an error is issued.\n\nParameters\n\nfilename the name of the file to access. In the case of exotic drivers\n\nthis may not refer to a physical file, but instead contain information for the driver on how to access a dataset. It should be in UTF-8 encoding.\n\nflags a combination of GDAL_OF_* flags (listed below) that may be combined through the logical | operator.\nDriver kind: GDALOFRASTER for raster drivers, GDALOFVECTOR for vector drivers. If none of the value is specified, both are implied.\nAccess mode: OF_READONLY (exclusive) or OF_UPDATE.\nShared mode: GDAL_OF_SHARED. If set, it allows the sharing of Dataset handles for a dataset with other callers that have set GDALOFSHARED. In particular, GDALOpenEx() will consult its list of currently open and shared Dataset's, and if the GetDescription() name for one exactly matches the pszFilename passed to GDALOpenEx() it will be referenced and returned, if GDALOpenEx() is called from the same thread.\nVerbose error: GDALOFVERBOSE_ERROR. If set, a failed attempt to open the file will lead to an error message to be reported.\noptions: additional format dependent options.\n\nAdditional Remarks\n\nSeveral recommendations:\n\nIf you open a dataset object with GA_Update access, it is not recommended\n\nto open a new dataset on the same underlying file.\n\nThe returned dataset should only be accessed by one thread at a time. To use\n\nit from different threads, you must add all necessary code (mutexes, etc.) to avoid concurrent use of the object. (Some drivers, such as GeoTIFF, maintain internal state variables that are updated each time a new block is read, preventing concurrent use.)\n\nIn order to reduce the need for searches through the operating system file\n\nsystem machinery, it is possible to give an optional list of files with the papszSiblingFiles parameter. This is the list of all files at the same level in the file system as the target file, including the target file. The filenames must not include any path components, are essentially just the output of VSIReadDir() on the parent directory. If the target object does not have filesystem semantics then the file list should be NULL.\n\nIn some situations (dealing with unverified data), the datasets can be opened in another process through the GDAL API Proxy mechanism.\n\nFor drivers supporting the VSI virtual file API, it is possible to open a file in a .zip archive (see VSIInstallZipFileHandler()), a .tar/.tar.gz/.tgz archive (see VSIInstallTarFileHandler()), or a HTTP / FTP server (see VSIInstallCurlFileHandler())\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.width-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL.width","text":"width(dataset::AbstractDataset)\n\nFetch raster width in pixels.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.write-Tuple{ArchGDAL.AbstractDataset, AbstractString}","page":"API Reference","title":"ArchGDAL.write","text":"write(dataset::AbstractDataset, filename::AbstractString; kwargs...)\n\nWrites the dataset to the designated filename.\n\nParameters\n\ndataset: The dataset to write\nfilename: The filename, UTF-8 encoded.\n\nKeyword Arguments\n\ndriver (ArchGDAL.Driver): The driver to use, you have to manually select the right driver via getdriver(drivername) matching the file extension you wish. Otherwise the driver of the source dataset will be used.\noptions (Vector{String}): A vector of strings containing KEY=VALUE pairs for driver-specific creation options.\nlayers: Specifies which layers should be written. Can be e.g. a range, Vector{Int} or tuple.\nlayer_options: Driver specific options for layer creation. The options can either be a Vector{String} to provide the same options for each layer, or a Vector{Vector{String}} to provide individual options per layer, in the order of their appearance in the dataset. The strings have to be KEY=VALUE pairs. If you give less individual options than there are layers, the remaining layers use the default creation options. An example for two layers: Dict(0 => [\"FORMAT=WKT\", \"LAUNDER=NO\"], 1 => [\"STRICT=NO\"])\nuse_gdal_copy (Bool): Set this to false (default is true) to achieve higher write speeds at the cost of possible errors. Note that when set to true, no coordinate transformations are possible while writing the features.\nchunksize (Integer): Number of features to write in one database transaction. Neglected when use_gdal_copy is true. Default is 20000.\nstrict (Bool): Set this to true if the written dataset should be a 1:1 copy of the source data, default is false, which allows the driver to adapt if necessary.\n\nReturns\n\n`nothing`\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.writelayers-Tuple{ArchGDAL.AbstractDataset, AbstractString}","page":"API Reference","title":"ArchGDAL.writelayers","text":"writelayers(dataset, filename; kwargs...)\n\nWrites the vector dataset to the designated filename. The options are passed to the newly created dataset and have to be given as a list of strings in KEY=VALUE format. The chunksize controls the number of features written in each database transaction, e.g. for SQLite. This function can also be used to copy datasets on disk.\n\nCurrently working drivers: FlatGeobuf, GeoJSON, GeoJSONSeq, GML, GPKG, JML, KML, MapML, ESRI Shapefile, SQLite\n\nParameters\n\ndataset The source dataset\nfilename The file name to write to\n\nKeyword arguments\n\ndriver: The driver to use, you have to manually select the right driver for the file extension you wish\noptions: A vector of strings containing KEY=VALUE pairs for driver-specific creation options\nlayer_indices: Specifies which layers should be written. Can be e.g. a range, Vector{Int} or tuple.\nlayer_options: Driver specific options for layer creation. The options can either be a Vector{String} to provide the same options for each layer, or a Dict(layer_index => Vector{String}) to provide individual options per layer. Note that layer indexing in GDAL starts with 0. The strings have to be KEY=VALUE pairs. An example for two layers: Dict(0 => [\"FORMAT=WKT\", \"LAUNDER=NO\"], 1 => [\"STRICT=NO\"])\nchunksize: Number of features to write in one database transaction. Neglected when use_gdal_copy is true.\nuse_gdal_copy: Set this to false (default is true) to achieve higher write speeds at the cost of possible errors. Note that when set to true, no coordinate transformations are possible while writing the features.\n\nReturns\n\nnothing\n\n\n\n\n\n","category":"method"},{"location":"reference/#API-Feature-Data","page":"API Reference","title":"Feature Data","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"feature.jl\", \"featuredefn.jl\", \"featurelayer.jl\", \"fielddefn.jl\", \"geometry.jl\", \"styletable.jl\", \"context.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.asbinary-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asbinary","text":"asbinary(feature::AbstractFeature, i::Integer)\n\nFetch field value as binary.\n\nParameters\n\nhFeat: handle to the feature that owned the field.\niField: the field to fetch, from 0 to GetFieldCount()-1.\n\nReturns\n\nthe field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asbool-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asbool","text":"asbool(feature::AbstractFeature, i::Integer)\n\nFetch field value as a boolean\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asdatetime-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asdatetime","text":"asdatetime(feature::AbstractFeature, i::Integer)\n\nFetch field value as date and time. Currently this method only works for OFTDate, OFTTime and OFTDateTime fields.\n\nParameters\n\nhFeat: handle to the feature that owned the field.\niField: the field to fetch, from 0 to GetFieldCount()-1.\n\nReturns\n\ntrue on success or false on failure.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asdouble-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asdouble","text":"asdouble(feature::AbstractFeature, i::Integer)\n\nFetch field value as a double.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asdoublelist-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asdoublelist","text":"asdoublelist(feature::AbstractFeature, i::Integer)\n\nFetch field value as a list of doubles.\n\nParameters\n\nhFeat: handle to the feature that owned the field.\niField: the field to fetch, from 0 to GetFieldCount()-1.\npnCount: an integer to put the list count (number of doubles) into.\n\nReturns\n\nthe field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief. If *pnCount is zero on return the returned pointer may be NULL or non-NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asint-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asint","text":"asint(feature::AbstractFeature, i::Integer)\n\nFetch field value as integer.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asint16-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asint16","text":"asint16(feature::AbstractFeature, i::Integer)\n\nFetch field value as integer 16 bit.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asint64-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asint64","text":"asint64(feature::AbstractFeature, i::Integer)\n\nFetch field value as integer 64 bit.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asint64list-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asint64list","text":"asint64list(feature::AbstractFeature, i::Integer)\n\nFetch field value as a list of 64 bit integers.\n\nParameters\n\nhFeat: handle to the feature that owned the field.\niField: the field to fetch, from 0 to GetFieldCount()-1.\npnCount: an integer to put the list count (number of integers) into.\n\nReturns\n\nthe field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief. If *pnCount is zero on return the returned pointer may be NULL or non-NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asintlist-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asintlist","text":"asintlist(feature::AbstractFeature, i::Integer)\n\nFetch field value as a list of integers.\n\nParameters\n\nhFeat: handle to the feature that owned the field.\niField: the field to fetch, from 0 to GetFieldCount()-1.\npnCount: an integer to put the list count (number of integers) into.\n\nReturns\n\nthe field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief. If *pnCount is zero on return the returned pointer may be NULL or non-NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.assingle-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.assingle","text":"assingle(feature::AbstractFeature, i::Integer)\n\nFetch field value as a single.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asstring-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asstring","text":"asstring(feature::AbstractFeature, i::Integer)\n\nFetch field value as a string.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asstringlist-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.asstringlist","text":"asstringlist(feature::AbstractFeature, i::Integer)\n\nFetch field value as a list of strings.\n\nParameters\n\nhFeat: handle to the feature that owned the field.\niField: the field to fetch, from 0 to GetFieldCount()-1.\n\nReturns\n\nthe field value. This list is internal, and should not be modified, or freed. Its lifetime may be very brief.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.destroy","text":"destroy(feature::AbstractFeature)\n\nDestroy the feature passed in.\n\nThe feature is deleted, but within the context of the GDAL/OGR heap. This is necessary when higher level applications use GDAL/OGR from a DLL and they want to delete a feature created within the DLL. If the delete is done in the calling application the memory will be freed onto the application heap which is inappropriate.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.fillunsetwithdefault!-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.fillunsetwithdefault!","text":"fillunsetwithdefault!(feature::AbstractFeature; notnull = true,\n options = StringList(C_NULL))\n\nFill unset fields with default values that might be defined.\n\nParameters\n\nfeature: handle to the feature.\nnotnull: if we should fill only unset fields with a not-null constraint.\npapszOptions: unused currently. Must be set to NULL.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findfieldindex-Tuple{ArchGDAL.AbstractFeature, Union{AbstractString, Symbol}}","page":"API Reference","title":"ArchGDAL.findfieldindex","text":"findfieldindex(feature::AbstractFeature, name::Union{AbstractString, Symbol})\n\nFetch the field index given field name.\n\nParameters\n\nfeature: the feature on which the field is found.\nname: the name of the field to search for.\n\nReturns\n\nthe field index, or nothing if no matching field is found.\n\nRemarks\n\nThis is a cover for the OGRFeatureDefn::GetFieldIndex() method.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findgeomindex","page":"API Reference","title":"ArchGDAL.findgeomindex","text":"findgeomindex(feature::AbstractFeature, name::Union{AbstractString, Symbol} = \"\")\n\nFetch the geometry field index given geometry field name.\n\nParameters\n\nfeature: the feature on which the geometry field is found.\nname: the name of the geometry field to search for. (defaults to \"\")\n\nReturns\n\nthe geometry field index, or -1 if no matching geometry field is found.\n\nRemarks\n\nThis is a cover for the OGRFeatureDefn::GetGeomFieldIndex() method.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.getfid-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getfid","text":"getfid(feature::AbstractFeature)\n\nGet feature identifier.\n\nReturns\n\nfeature id or OGRNullFID (-1) if none has been assigned.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getfield-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.getfield","text":"getfield(feature, i)\n\nWhen the field is unset, it will return nothing. When the field is set but null, it will return missing.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\nhttps://gdal.org/development/rfc/rfc67_nullfieldvalues.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getfielddefn-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.getfielddefn","text":"getfielddefn(feature::AbstractFeature, i::Integer)\n\nFetch definition for this field.\n\nParameters\n\nfeature: the feature on which the field is found.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\nReturns\n\nan handle to the field definition (from the FeatureDefn). This is an internal reference, and should not be deleted or modified.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeom-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.getgeom","text":"getgeom(feature::AbstractFeature, i::Integer)\n\nReturns a clone of the feature geometry at index i.\n\nParameters\n\nfeature: the feature to get geometry from.\ni: geometry field to get.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeom-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getgeom","text":"getgeom(feature::AbstractFeature)\n\nReturns a clone of the geometry corresponding to the feature.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeomdefn-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.getgeomdefn","text":"getgeomdefn(feature::AbstractFeature, i::Integer)\n\nFetch definition for this geometry field.\n\nParameters\n\nfeature: the feature on which the field is found.\ni: the field to fetch, from 0 to GetGeomFieldCount()-1.\n\nReturns\n\nThe field definition (from the OGRFeatureDefn). This is an internal reference, and should not be deleted or modified.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getmediatype-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getmediatype","text":"getmediatype(feature::AbstractFeature)\n\nReturns the native media type for the feature.\n\nThe native media type is the identifier for the format of the native data. It follows the IANA RFC 2045 (see https://en.wikipedia.org/wiki/Media_type), e.g. \"application/vnd.geo+json\" for JSON.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getnativedata-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getnativedata","text":"getnativedata(feature::AbstractFeature)\n\nReturns the native data for the feature.\n\nThe native data is the representation in a \"natural\" form that comes from the driver that created this feature, or that is aimed at an output driver. The native data may be in different format, which is indicated by GetNativeMediaType().\n\nNote that most drivers do not support storing the native data in the feature object, and if they do, generally the NATIVE_DATA open option must be passed at dataset opening.\n\nThe \"native data\" does not imply it is something more performant or powerful than what can be obtained with the rest of the API, but it may be useful in round-tripping scenarios where some characteristics of the underlying format are not captured otherwise by the OGR abstraction.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getstylestring-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getstylestring","text":"getstylestring(feature::AbstractFeature)\n\nFetch style string for this feature.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getstyletable-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getstyletable","text":"getstyletable(feature::AbstractFeature)\n\nFetch style table for this feature.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isfieldnull-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.isfieldnull","text":"isfieldnull(feature::AbstractFeature, i::Integer)\n\nTest if a field is null.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to test, from 0 to GetFieldCount()-1.\n\nReturns\n\ntrue if the field is null, otherwise false.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc67_nullfieldvalues.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isfieldset-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.isfieldset","text":"isfieldset(feature::AbstractFeature, i::Integer)\n\nTest if a field has ever been assigned a value or not.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isfieldsetandnotnull-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.isfieldsetandnotnull","text":"isfieldsetandnotnull(feature::AbstractFeature, i::Integer)\n\nTest if a field is set and not null.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to test, from 0 to GetFieldCount()-1.\n\nReturns\n\ntrue if the field is set and not null, otherwise false.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc67_nullfieldvalues.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nfield-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.nfield","text":"nfield(feature::AbstractFeature)\n\nFetch number of fields on this feature.\n\nThis will always be the same as the field count for the OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ngeom-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.ngeom","text":"ngeom(feature::AbstractFeature)\n\nFetch number of geometry fields on this feature.\n\nThis will always be the same as the geometry field count for OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setfid!-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.setfid!","text":"setfid!(feature::AbstractFeature, i::Integer)\n\nSet the feature identifier.\n\nParameters\n\nfeature: handle to the feature to set the feature id to.\ni: the new feature identifier value to assign.\n\nReturns\n\nOn success OGRERR_NONE, or on failure some other value.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setfield!","page":"API Reference","title":"ArchGDAL.setfield!","text":"setfield!(feature::AbstractFeature, i::Integer, value)\nsetfield!(feature::AbstractFeature, i::Integer, value::DateTime, tzflag::Int = 0)\n\nSet a feature's i-th field to value.\n\nThe following types for value are accepted: Int32, Int64, Float64, AbstractString, or a Vector with those in it, as well as Vector{UInt8}. For DateTime values, an additional keyword argument tzflag is accepted (0=unknown, 1=localtime, 100=GMT, see data model for details).\n\nOFTInteger, OFTInteger64 and OFTReal fields will be set directly. OFTString fields will be assigned a string representation of the value, but not necessarily taking into account formatting constraints on this field. Other field types may be unaffected.\n\nParameters\n\nfeature: handle to the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\nvalue: the value to assign.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.setfieldnull!-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.setfieldnull!","text":"setfieldnull!(feature::AbstractFeature, i::Integer)\n\nClear a field, marking it as null.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to set to null, from 0 to GetFieldCount()-1.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc67_nullfieldvalues.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setfrom!","page":"API Reference","title":"ArchGDAL.setfrom!","text":"setfrom!(feature1::AbstractFeature, feature2::AbstractFeature, forgiving::Bool = false)\nsetfrom!(feature1::AbstractFeature, feature2::AbstractFeature, indices::Vector{Cint},\n forgiving::Bool = false)\n\nSet one feature from another.\n\nParameters\n\nfeature1: handle to the feature to set to.\nfeature2: handle to the feature from which geometry, and field values will be copied.\nindices: indices of the destination feature's fields stored at the corresponding index of the source feature's fields. A value of -1 should be used to ignore the source's field. The array should not be NULL and be as long as the number of fields in the source feature.\nforgiving: true if the operation should continue despite lacking output fields matching some of the source fields.\n\nReturns\n\nOGRERR_NONE if the operation succeeds, even if some values are not transferred, otherwise an error code.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.setgeom!-Tuple{ArchGDAL.AbstractFeature, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.setgeom!","text":"setgeom!(feature::AbstractFeature, geom::AbstractGeometry)\n\nSet feature geometry.\n\nThis method updates the features geometry, and operate exactly as SetGeometryDirectly(), except that this method does not assume ownership of the passed geometry, but instead makes a copy of it.\n\nParameters\n\nfeature: the feature on which new geometry is applied to.\ngeom: the new geometry to apply to feature.\n\nReturns\n\nOGRERR_NONE if successful, or OGR_UNSUPPORTED_GEOMETRY_TYPE if the geometry type is illegal for the OGRFeatureDefn (checking not yet implemented).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setgeom!-Tuple{ArchGDAL.AbstractFeature, Integer, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.setgeom!","text":"setgeom!(feature::AbstractFeature, i::Integer, geom::AbstractGeometry)\n\nSet feature geometry of a specified geometry field.\n\nThis function updates the features geometry, and operate exactly as SetGeometryDirectly(), except that this function does not assume ownership of the passed geometry, but instead makes a copy of it.\n\nParameters\n\nfeature: the feature on which to apply the geometry.\ni: geometry field to set.\ngeom: the new geometry to apply to feature.\n\nReturns\n\nOGRERR_NONE if successful, or OGR_UNSUPPORTED_GEOMETRY_TYPE if the geometry type is illegal for the OGRFeatureDefn (checking not yet implemented).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setmediatype!-Tuple{ArchGDAL.AbstractFeature, AbstractString}","page":"API Reference","title":"ArchGDAL.setmediatype!","text":"setmediatype!(feature::AbstractFeature, mediatype::AbstractString)\n\nSets the native media type for the feature.\n\nThe native media type is the identifier for the format of the native data. It follows the IANA RFC 2045 (see https://en.wikipedia.org/wiki/Media_type), e.g. \"application/vnd.geo+json\" for JSON.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setnativedata!-Tuple{ArchGDAL.AbstractFeature, AbstractString}","page":"API Reference","title":"ArchGDAL.setnativedata!","text":"setnativedata!(feature::AbstractFeature, data::AbstractString)\n\nSets the native data for the feature.\n\nThe native data is the representation in a \"natural\" form that comes from the driver that created this feature, or that is aimed at an output driver. The native data may be in different format, which is indicated by GetNativeMediaType().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setstylestring!-Tuple{ArchGDAL.AbstractFeature, AbstractString}","page":"API Reference","title":"ArchGDAL.setstylestring!","text":"setstylestring!(feature::AbstractFeature, style::AbstractString)\n\nSet feature style string.\n\nThis method operate exactly as setstylestringdirectly!() except that it doesn't assume ownership of the passed string, but makes a copy of it.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setstyletable!-Tuple{ArchGDAL.AbstractFeature, ArchGDAL.StyleTable}","page":"API Reference","title":"ArchGDAL.setstyletable!","text":"setstyletable!(feature::AbstractFeature, styletable::StyleTable)\n\nSet the style table for this feature.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_clone-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.unsafe_clone","text":"unsafe_clone(feature::AbstractFeature)\n\nDuplicate feature.\n\nThe newly created feature is owned by the caller, and will have its own reference to the OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsetfield!-Tuple{ArchGDAL.AbstractFeature, Integer}","page":"API Reference","title":"ArchGDAL.unsetfield!","text":"unsetfield!(feature::AbstractFeature, i::Integer)\n\nClear a field, marking it as unset.\n\nParameters\n\nfeature: the feature that owned the field.\ni: the field to fetch, from 0 to GetFieldCount()-1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.validate-Tuple{ArchGDAL.AbstractFeature, ArchGDAL.FieldValidation, Bool}","page":"API Reference","title":"ArchGDAL.validate","text":"validate(feature::AbstractFeature, flags::Integer, emiterror::Bool)\n\nValidate that a feature meets constraints of its schema.\n\nThe scope of test is specified with the nValidateFlags parameter.\n\nRegarding OGR_F_VAL_WIDTH, the test is done assuming the string width must be interpreted as the number of UTF-8 characters. Some drivers might interpret the width as the number of bytes instead. So this test is rather conservative (if it fails, then it will fail for all interpretations).\n\nParameters\n\nfeature: handle to the feature to validate.\nflags: OGR_F_VAL_ALL or combination of OGR_F_VAL_NULL, OGR_F_VAL_GEOM_TYPE, OGR_F_VAL_WIDTH and OGR_F_VAL_ALLOW_NULL_WHEN_DEFAULT with | operator\nemiterror: true if a CPLError() must be emitted when a check fails\n\nReturns\n\ntrue if all enabled validation tests pass.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#Base.keys-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"Base.keys","text":"keys(feature::AbstractFeature)\n\nFetch the keys or names on this feature.\n\n\n\n\n\n","category":"method"},{"location":"reference/#Base.values-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"Base.values","text":"values(feature::AbstractFeature)\n\nFetch the values this feature.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addfielddefn!-Tuple{ArchGDAL.FeatureDefn, ArchGDAL.FieldDefn}","page":"API Reference","title":"ArchGDAL.addfielddefn!","text":"addfielddefn!(featuredefn::FeatureDefn, fielddefn::FieldDefn)\n\nAdd a new field definition to the passed feature definition.\n\nTo add a new field definition to a layer definition, do not use this function directly, but use OGRLCreateField() instead.\n\nThis function should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn. The OGRFieldDefn passed in is copied, and remains the responsibility of the caller.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addgeomdefn!-Tuple{ArchGDAL.FeatureDefn, ArchGDAL.AbstractGeomFieldDefn}","page":"API Reference","title":"ArchGDAL.addgeomdefn!","text":"addgeomdefn!(featuredefn::FeatureDefn, geomfielddefn::AbstractGeomFieldDefn)\n\nAdd a new field definition to the passed feature definition.\n\nTo add a new geometry field definition to a layer definition, do not use this function directly, but use OGRLayer::CreateGeomField() instead.\n\nThis method does an internal copy of the passed geometry field definition, unless bCopy is set to false (in which case it takes ownership of the field definition.\n\nThis method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.deletefielddefn!-Tuple{ArchGDAL.FeatureDefn, Integer}","page":"API Reference","title":"ArchGDAL.deletefielddefn!","text":"deletefielddefn!(featuredefn::FeatureDefn, i::Integer)\n\nDelete an existing field definition.\n\nTo delete an existing field definition from a layer definition, do not use this function directly, but use OGR_L_DeleteField() instead.\n\nThis method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.deletegeomdefn!-Tuple{ArchGDAL.FeatureDefn, Integer}","page":"API Reference","title":"ArchGDAL.deletegeomdefn!","text":"deletegeomdefn!(featuredefn::FeatureDefn, i::Integer)\n\nDelete an existing geometry field definition.\n\nTo delete an existing field definition from a layer definition, do not use this function directly, but use OGRLayer::DeleteGeomField() instead.\n\nThis method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.dereference-Tuple{ArchGDAL.FeatureDefn}","page":"API Reference","title":"ArchGDAL.dereference","text":"dereference(featuredefn::FeatureDefn)\n\nDecrements the reference count by one, and returns the updated count.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.FeatureDefn}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy a feature definition object and release all memory associated with it\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.IFeatureDefnView}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy a feature definition view\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findfieldindex-Tuple{ArchGDAL.AbstractFeatureDefn, Union{AbstractString, Symbol}}","page":"API Reference","title":"ArchGDAL.findfieldindex","text":"findfieldindex(featuredefn::AbstractFeatureDefn,\n name::Union{AbstractString, Symbol})\n\nFind field by name.\n\nReturns\n\nthe field index, or -1 if no match found.\n\nRemarks\n\nThis uses the OGRFeatureDefn::GetFieldIndex() method.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findgeomindex-2","page":"API Reference","title":"ArchGDAL.findgeomindex","text":"findgeomindex(featuredefn::AbstractFeatureDefn, name::AbstractString = \"\")\n\nFind geometry field by name.\n\nThe geometry field index of the first geometry field matching the passed field name (case insensitively) is returned.\n\nReturns\n\nthe geometry field index, or -1 if no match found.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.getfeaturedefn-Tuple{ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.getfeaturedefn","text":"getfeaturedefn(feature::AbstractFeature)\n\nFetch feature definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getfielddefn-Tuple{ArchGDAL.FeatureDefn, Integer}","page":"API Reference","title":"ArchGDAL.getfielddefn","text":"getfielddefn(featuredefn::FeatureDefn, i::Integer)\n\nFetch field definition of the passed feature definition.\n\nParameters\n\nfeaturedefn: the feature definition to get the field definition from.\ni: index of the field to fetch, between 0 and nfield(featuredefn)-1.\n\nReturns\n\nan handle to an internal field definition object or NULL if invalid index. This object should not be modified or freed by the application.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeomdefn","page":"API Reference","title":"ArchGDAL.getgeomdefn","text":"getgeomdefn(featuredefn::FeatureDefn, i::Integer = 0)\n\nFetch geometry field definition of the passed feature definition.\n\nParameters\n\ni geometry field to fetch, between 0 (default) and ngeomfield(fd)-1.\n\nReturns\n\nan internal field definition object or NULL if invalid index. This object should not be modified or freed by the application.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.getgeomtype-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.getgeomtype","text":"getgeomtype(featuredefn::AbstractFeatureDefn)\n\nFetch the geometry base type of the passed feature definition.\n\nFor layers without any geometry field, this method returns wkbNone.\n\nThis returns the same result as OGR_FD_GetGeomType(OGR_L_GetLayerDefn(hLayer)) but for a few drivers, calling OGR_L_GetGeomType() directly can avoid lengthy layer definition initialization.\n\nFor layers with multiple geometry fields, this method only returns the geometry type of the first geometry column. For other columns, use OGR_GFld_GetType(OGR_FD_GetGeomFieldDefn(OGR_L_GetLayerDefn(hLayer), i)).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(featuredefn::AbstractFeatureDefn)\n\nGet name of the OGRFeatureDefn passed as an argument.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isgeomignored-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.isgeomignored","text":"isgeomignored(featuredefn::AbstractFeatureDefn)\n\nDetermine whether the geometry can be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.issame-Tuple{ArchGDAL.AbstractFeatureDefn, ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.issame","text":"issame(featuredefn1::AbstractFeatureDefn, featuredefn2::AbstractFeatureDefn)\n\nTest if the feature definition is identical to the other one.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isstyleignored-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.isstyleignored","text":"isstyleignored(featuredefn::AbstractFeatureDefn)\n\nDetermine whether the style can be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nfield-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.nfield","text":"nfield(featuredefn::AbstractFeatureDefn)\n\nFetch number of fields on the passed feature definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ngeom-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.ngeom","text":"ngeom(featuredefn::AbstractFeatureDefn)\n\nFetch number of geometry fields on the passed feature definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nreference-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.nreference","text":"nreference(featuredefn::AbstractFeatureDefn)\n\nFetch the current reference count.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.reference-Tuple{ArchGDAL.FeatureDefn}","page":"API Reference","title":"ArchGDAL.reference","text":"reference(featuredefn::FeatureDefn)\n\nIncrements the reference count in the FeatureDefn by one.\n\nThe count is used to track the number of Features referencing this definition.\n\nReturns\n\nThe updated reference count.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.release-Tuple{ArchGDAL.FeatureDefn}","page":"API Reference","title":"ArchGDAL.release","text":"release(featuredefn::FeatureDefn)\n\nDrop a reference, and destroy if unreferenced.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.reorderfielddefns!-Tuple{ArchGDAL.FeatureDefn, Vector{Int32}}","page":"API Reference","title":"ArchGDAL.reorderfielddefns!","text":"reorderfielddefns!(featuredefn::FeatureDefn, indices::Vector{Cint})\n\nReorder the field definitions in the array of the feature definition.\n\nTo reorder the field definitions in a layer definition, do not use this function directly, but use OGR_L_ReorderFields() instead.\n\nThis method should only be called while there are no OGRFeature objects in existence based on this OGRFeatureDefn.\n\nParameters\n\nfd: handle to the feature definition.\nindices: an array of GetFieldCount() elements which is a permutation of [0, GetFieldCount()-1]. indices is such that, for each field definition at position i after reordering, its position before reordering was indices[i].\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setgeomignored!-Tuple{ArchGDAL.FeatureDefn, Bool}","page":"API Reference","title":"ArchGDAL.setgeomignored!","text":"setgeomignored!(featuredefn::FeatureDefn, ignore::Bool)\n\nSet whether the geometry can be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setgeomtype!-Tuple{ArchGDAL.FeatureDefn, ArchGDAL.OGRwkbGeometryType}","page":"API Reference","title":"ArchGDAL.setgeomtype!","text":"setgeomtype!(featuredefn::FeatureDefn, etype::OGRwkbGeometryType)\n\nAssign the base geometry type for the passed layer (same as the fd).\n\nAll geometry objects using this type must be of the defined type or a derived type. The default upon creation is wkbUnknown which allows for any geometry type. The geometry type should generally not be changed after any OGRFeatures have been created against this definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setstyleignored!-Tuple{ArchGDAL.FeatureDefn, Bool}","page":"API Reference","title":"ArchGDAL.setstyleignored!","text":"setstyleignored!(featuredefn::FeatureDefn, ignore::Bool)\n\nSet whether the style can be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createfeature-Tuple{ArchGDAL.AbstractFeatureDefn}","page":"API Reference","title":"ArchGDAL.unsafe_createfeature","text":"unsafe_createfeature(featuredefn::AbstractFeatureDefn)\n\nReturns the new feature object with null fields and no geometry\n\nNote that the OGRFeature will increment the reference count of it's defining OGRFeatureDefn. Destruction of the OGRFeatureDefn before destruction of all OGRFeatures that depend on it is likely to result in a crash.\n\nStarting with GDAL 2.1, returns NULL in case out of memory situation.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createfeaturedefn-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.unsafe_createfeaturedefn","text":"unsafe_createfeaturedefn(name::AbstractString)\n\nCreate a new feature definition object to hold field definitions.\n\nThe FeatureDefn maintains a reference count, but this starts at zero, and should normally be incremented by the owner.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addfeature!-Union{Tuple{L}, Tuple{L, ArchGDAL.AbstractFeature}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.addfeature!","text":"addfeature!(layer::AbstractFeatureLayer, feature::AbstractFeature)\n\nWrite a new feature within a layer.\n\nRemarks\n\nThe passed feature is written to the layer as a new feature, rather than overwriting an existing one. If the feature has a feature id other than OGRNullFID, then the native implementation may use that as the feature id of the new feature, but not necessarily. Upon successful return the passed feature will have been updated with the new feature id.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addfielddefn!-Union{Tuple{L}, Tuple{L, ArchGDAL.AbstractFieldDefn}, Tuple{L, ArchGDAL.AbstractFieldDefn, Bool}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.addfielddefn!","text":"addfielddefn!(layer::AbstractFeatureLayer, field::AbstractFieldDefn,\n approx = false)\n\nCreate a new field on a layer.\n\nParameters\n\nlayer: the layer to write the field definition.\nfield: the field definition to write to disk.\napprox: If true, the field may be created in a slightly different form depending on the limitations of the format driver.\n\nRemarks\n\nYou must use this to create new fields on a real layer. Internally the OGRFeatureDefn for the layer will be updated to reflect the new field. Applications should never modify the OGRFeatureDefn used by a layer directly.\n\nThis function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.\n\nNot all drivers support this function. You can query a layer to check if it supports it with the GDAL.OLCCreateField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.\n\nDrivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addgeomdefn!-Union{Tuple{L}, Tuple{L, ArchGDAL.AbstractGeomFieldDefn}, Tuple{L, ArchGDAL.AbstractGeomFieldDefn, Bool}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.addgeomdefn!","text":"addgeomdefn!(layer::AbstractFeatureLayer, field::AbstractGeomFieldDefn,\n approx = false)\n\nCreate a new geometry field on a layer.\n\nParameters\n\nlayer: the layer to write the field definition.\nfield: the geometry field definition to write to disk.\napprox: If true, the field may be created in a slightly different form depending on the limitations of the format driver.\n\nRemarks\n\nYou must use this to create new geometry fields on a real layer. Internally the OGRFeatureDefn for the layer will be updated to reflect the new field. Applications should never modify the OGRFeatureDefn used by a layer directly.\n\nThis function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.\n\nNot all drivers support this function. You can query a layer to check if it supports it with the GDAL.OLCCreateGeomField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.\n\nDrivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.copy-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.copy","text":"copy(layer, dataset, name, options)\n\nCopy an existing layer.\n\nThis method creates a new layer, duplicate the field definitions of the source layer, and then duplicates each feature of the source layer.\n\nParameters\n\nlayer: source layer to be copied.\n\nKeyword Arguments\n\ndataset: the dataset handle. (Creates a new dataset in memory by default.)\nname: the name of the layer to create on the dataset.\noptions: a StringList of name=value (driver-specific) options.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.createlayer-Tuple{}","page":"API Reference","title":"ArchGDAL.createlayer","text":"createlayer(name, dataset, geom, spatialref, options)\n\nThis function attempts to create a new layer on the dataset with the indicated name, spatialref, and geometry type.\n\nKeyword Arguments\n\nname: the name for the new layer. This should ideally not match any existing layer on the datasource. Defaults to an empty string.\ndataset: the dataset. Defaults to creating a new in memory dataset.\ngeom: the geometry type for the layer. Use wkbUnknown (default) if there are no constraints on the types geometry to be written.\nspatialref: the coordinate system to use for the new layer.\noptions: a StringList of name=value (driver-specific) options.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.deletefeature!-Union{Tuple{L}, Tuple{L, Integer}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.deletefeature!","text":"deletefeature!(layer::AbstractFeatureLayer, i::Integer)\n\nDelete feature with fid i from layer.\n\nRemarks\n\nThe feature with the indicated feature id is deleted from the layer if supported by the driver. Most drivers do not support feature deletion, and will return OGRERRUNSUPPORTEDOPERATION. The OGRLTestCapability() function may be called with OLCDeleteFeature to check if the driver supports feature deletion.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.dereference-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.dereference","text":"dereference(layer::AbstractFeatureLayer)\n\nDecrement layer reference count.\n\nReturns\n\nThe reference count after decrementing.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.envelope","page":"API Reference","title":"ArchGDAL.envelope","text":"envelope(layer::AbstractFeatureLayer, force::Bool = false)\nenvelope(layer::AbstractFeatureLayer, i::Integer, force::Bool = false)\n\nFetch the extent of this layer.\n\nReturns the extent (MBR) of the data in the layer. If force is false, and it would be expensive to establish the extent then OGRERR_FAILURE will be returned indicating that the extent isn't know. If force is true then some implementations will actually scan the entire layer once to compute the MBR of all the features in the layer.\n\nParameters\n\nlayer: handle to the layer from which to get extent.\ni: (optional) the index of the geometry field to compute the extent.\nforce: Flag indicating whether the extent should be computed even if it is expensive.\n\nAdditional Remarks\n\nDepending on the drivers, the returned extent may or may not take the spatial filter into account. So it is safer to call GetExtent() without setting a spatial filter.\n\nLayers without any geometry may return OGRERR_FAILURE just indicating that no meaningful extents could be collected.\n\nNote that some implementations of this method may alter the read cursor of the layer.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.fidcolumnname-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.fidcolumnname","text":"fidcolumnname(layer::AbstractFeatureLayer)\n\nThe name of the FID column in the database, or \"\" if not supported.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findfieldindex-Tuple{ArchGDAL.AbstractFeatureLayer, Union{AbstractString, Symbol}, Bool}","page":"API Reference","title":"ArchGDAL.findfieldindex","text":"findfieldindex(layer::AbstractFeatureLayer,\n field::Union{AbstractString, Symbol}, exactmatch::Bool)\n\nFind the index of the field in a layer, or -1 if the field doesn't exist.\n\nIf exactmatch is set to false and the field doesn't exists in the given form the driver might apply some changes to make it match, like those it might do if the layer was created (eg. like LAUNDER in the OCI driver).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.geomcolumnname-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.geomcolumnname","text":"geomcolumnname(layer::AbstractFeatureLayer)\n\nThe name of the geometry column in the database, or \"\" if not supported.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeomtype-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.getgeomtype","text":"getgeomtype(layer::AbstractFeatureLayer)\n\nReturn the layer geometry type.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.getname","text":"getname(layer::AbstractFeatureLayer)\n\nReturn the layer name.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getspatialfilter-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.getspatialfilter","text":"getspatialfilter(layer::AbstractFeatureLayer)\n\nReturns the current spatial filter for this layer.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getspatialref-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.getspatialref","text":"getspatialref(layer::AbstractFeatureLayer)\n\nReturns a clone of the spatial reference system for this layer.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.layerdefn-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.layerdefn","text":"layerdefn(layer::AbstractFeatureLayer)\n\nReturns a view of the schema information for this layer.\n\nRemarks\n\nThe featuredefn is owned by the layer and should not be modified.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nfeature","page":"API Reference","title":"ArchGDAL.nfeature","text":"nfeature(layer::AbstractFeatureLayer, force::Bool = false)\n\nFetch the feature count in this layer, or -1 if the count is not known.\n\nParameters\n\nlayer: handle to the layer that owned the features.\nforce: flag indicating whether the count should be computed even if it is expensive. (false by default.)\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.nfield-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.nfield","text":"nfield(layer::AbstractFeatureLayer)\n\nFetch number of fields on the feature layer.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ngeom-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.ngeom","text":"ngeom(layer::AbstractFeatureLayer)\n\nFetch number of geometry fields on the feature layer.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nreference-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.nreference","text":"nreference(layer::AbstractFeatureLayer)\n\nThe current reference count for the layer object itself.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.reference-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.reference","text":"reference(layer::AbstractFeatureLayer)\n\nIncrement layer reference count.\n\nReturns\n\nThe reference count after incrementing.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.resetreading!-Tuple{L} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.resetreading!","text":"resetreading!(layer::AbstractFeatureLayer)\n\nReset feature reading to start on the first feature.\n\nThis affects nextfeature().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setattributefilter!-Union{Tuple{L}, Tuple{L, AbstractString}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setattributefilter!","text":"setattributefilter!(layer::AbstractFeatureLayer, query::AbstractString)\n\nSet a new attribute query.\n\nThis method sets the attribute query string to be used when fetching features via the nextfeature() method. Only features for which the query evaluates as true will be returned.\n\nParameters\n\nlayer: handle to the layer on which attribute query will be executed.\nquery: query in restricted SQL WHERE format.\n\nRemarks\n\nThe query string should be in the format of an SQL WHERE clause. For instance \"population > 1000000 and population < 5000000\" where population is an attribute in the layer. The query format is normally a restricted form of SQL WHERE clause as described in the \"WHERE\" section of the OGR SQL tutorial. In some cases (RDBMS backed drivers) the native capabilities of the database may be used to interpret the WHERE clause in which case the capabilities will be broader than those of OGR SQL.\n\nNote that installing a query string will generally result in resetting the current reading position (ala resetreading!()).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setfeature!-Tuple{ArchGDAL.AbstractFeatureLayer, ArchGDAL.AbstractFeature}","page":"API Reference","title":"ArchGDAL.setfeature!","text":"setfeature!(layer::AbstractFeatureLayer, feature::AbstractFeature)\n\nRewrite an existing feature.\n\nThis function will write a feature to the layer, based on the feature id within the OGRFeature.\n\nRemarks\n\nUse OGRLTestCapability(OLCRandomWrite) to establish if this layer supports random access writing via OGRLSetFeature().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setignoredfields!-Union{Tuple{L}, Tuple{L, Any}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setignoredfields!","text":"setignoredfields!(layer::AbstractFeatureLayer, fieldnames)\n\nSet which fields can be omitted when retrieving features from the layer.\n\nParameters\n\nfieldnames: an array of field names terminated by NULL item. If NULL is\n\npassed, the ignored list is cleared.\n\nRemarks\n\nIf the driver supports this functionality (testable using OLCIgnoreFields capability), it will not fetch the specified fields in subsequent calls to GetFeature()/nextfeature() and thus save some processing time and/or bandwidth.\n\nBesides field names of the layers, the following special fields can be passed: \"OGR_GEOMETRY\" to ignore geometry and \"OGR_STYLE\" to ignore layer style.\n\nBy default, no fields are ignored.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setnextbyindex!-Union{Tuple{L}, Tuple{L, Integer}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setnextbyindex!","text":"setnextbyindex!(layer::AbstractFeatureLayer, i::Integer)\n\nMove read cursor to the i-th feature in the current resultset.\n\nThis method allows positioning of a layer such that the nextfeature() call will read the requested feature, where i is an absolute index into the current result set. So, setting it to 3 would mean the next feature read with nextfeature() would have been the fourth feature to have been read if sequential reading took place from the beginning of the layer, including accounting for spatial and attribute filters.\n\nParameters\n\nlayer: handle to the layer\ni: the index indicating how many steps into the result set to seek.\n\nRemarks\n\nOnly in rare circumstances is setnextbyindex!() efficiently implemented. In all other cases the default implementation which calls resetreading!() and then calls nextfeature() i times is used. To determine if fast seeking is available on the layer, use the testcapability() method with a value of OLCFastSetNextByIndex.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setspatialfilter!-Union{Tuple{L}, Tuple{L, ArchGDAL.AbstractGeometry}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setspatialfilter!","text":"setspatialfilter!(layer::AbstractFeatureLayer, geom::AbstractGeometry)\n\nSet a new spatial filter for the layer, using the geom.\n\nThis method set the geometry to be used as a spatial filter when fetching features via the nextfeature() method. Only features that geometrically intersect the filter geometry will be returned.\n\nParameters\n\nlayer handle to the layer on which to set the spatial filter.\ngeom handle to the geometry to use as a filtering region. NULL may be passed indicating that the current spatial filter should be cleared, but no new one instituted.\n\nRemarks\n\nCurrently this test may be inaccurately implemented, but it is guaranteed that all features whose envelope (as returned by OGRGeometry::getEnvelope()) overlaps the envelope of the spatial filter will be returned. This can result in more shapes being returned that should strictly be the case.\n\nFor the time being the passed filter geometry should be in the same SRS as the geometry field definition it corresponds to (as returned by GetLayerDefn()->OGRFeatureDefn::GetGeomFieldDefn(i)->GetSpatialRef()). In the future this may be generalized.\n\nNote that only the last spatial filter set is applied, even if several successive calls are done with different iGeomField values.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setspatialfilter!-Union{Tuple{L}, Tuple{L, Integer, ArchGDAL.AbstractGeometry}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setspatialfilter!","text":"setspatialfilter!(layer::AbstractFeatureLayer, i::Integer,\n geom::AbstractGeometry)\n\nSet a new spatial filter.\n\nThis method set the geometry to be used as a spatial filter when fetching features via the nextfeature() method. Only features that geometrically intersect the filter geometry will be returned.\n\nParameters\n\nlayer: the layer on which to set the spatial filter.\ni: index of the geometry field on which the spatial filter operates.\ngeom: the geometry to use as a filtering region. NULL may be passed indicating that the current spatial filter should be cleared, but no new one instituted.\n\nRemarks\n\nCurrently this test is may be inaccurately implemented, but it is guaranteed that all features who's envelope (as returned by OGRGeometry::getEnvelope()) overlaps the envelope of the spatial filter will be returned. This can result in more shapes being returned that should strictly be the case.\n\nFor the time being the passed filter geometry should be in the same SRS as the layer (as returned by OGRLayer::GetSpatialRef()). In the future this may be generalized.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setspatialfilter!-Union{Tuple{L}, Tuple{L, Integer, Vararg{Real, 4}}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setspatialfilter!","text":"setspatialfilter!(layer::AbstractFeatureLayer, i::Integer, xmin, ymin, xmax,\n ymax)\n\nSet a new rectangular spatial filter.\n\nParameters\n\nlayer: the feature layer on which to set the spatial filter.\ni: index of the geometry field on which the spatial filter operates.\nxmin: the minimum X coordinate for the rectangular region.\nymin: the minimum Y coordinate for the rectangular region.\nxmax: the maximum X coordinate for the rectangular region.\nymax: the maximum Y coordinate for the rectangular region.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setspatialfilter!-Union{Tuple{L}, Tuple{L, Vararg{Real, 4}}} where L<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.setspatialfilter!","text":"setspatialfilter!(layer::AbstractFeatureLayer, xmin, ymin, xmax, ymax)\n\nSet a new rectangular spatial filter for the layer.\n\nThis method set rectangle to be used as a spatial filter when fetching features via the nextfeature() method. Only features that geometrically intersect the given rectangle will be returned.\n\nThe x/y values should be in the same coordinate system as the layer as a whole (as returned by OGRLayer::GetSpatialRef()). Internally this method is normally implemented as creating a 5 vertex closed rectangular polygon and passing it to OGRLayer::SetSpatialFilter(). It exists as a convenience.\n\nThe only way to clear a spatial filter set with this method is to call OGRLayer::SetSpatialFilter(NULL).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.testcapability-Tuple{ArchGDAL.AbstractFeatureLayer, AbstractString}","page":"API Reference","title":"ArchGDAL.testcapability","text":"testcapability(layer::AbstractFeatureLayer, capability::AbstractString)\n\nTest if this layer supported the named capability.\n\nParameters\n\ncapability the name of the capability to test.\n\nReturns\n\ntrue if the layer has the requested capability, false otherwise. It will return false for any unrecognized capabilities.\n\nAdditional Remarks\n\nThe capability codes that can be tested are represented as strings, but #defined constants exists to ensure correct spelling. Specific layer types may implement class specific capabilities, but this can't generally be discovered by the caller.\n\nOLCRandomRead / \"RandomRead\": true if the GetFeature() method is implemented in an optimized way for this layer, as opposed to the default implementation using resetreading!() and nextfeature() to find the requested feature id.\nOLCSequentialWrite / \"SequentialWrite\": true if the CreateFeature() method works for this layer. Note this means that this particular layer is writable. The same OGRLayer class may returned false for other layer instances that are effectively read-only.\nOLCRandomWrite / \"RandomWrite\": true if the SetFeature() method is operational on this layer. Note this means that this particular layer is writable. The same OGRLayer class may returned false for other layer instances that are effectively read-only.\nOLCFastSpatialFilter / \"FastSpatialFilter\": true if this layer implements spatial filtering efficiently. Layers that effectively read all features, and test them with the OGRFeature intersection methods should return false. This can be used as a clue by the application whether it should build and maintain its own spatial index for features in this layer.\nOLCFastFeatureCount / \"FastFeatureCount\": true if this layer can return a feature count (via GetFeatureCount()) efficiently. i.e. without counting the features. In some cases this will return true until a spatial filter is installed after which it will return false.\nOLCFastGetExtent / \"FastGetExtent\": true if this layer can return its data extent (via GetExtent()) efficiently, i.e. without scanning all the features. In some cases this will return true until a spatial filter is installed after which it will return false.\nOLCFastSetNextByIndex / \"FastSetNextByIndex\": true if this layer can perform the SetNextByIndex() call efficiently, otherwise false.\nOLCCreateField / \"CreateField\": true if this layer can create new fields on the current layer using CreateField(), otherwise false.\nOLCCreateGeomField / \"CreateGeomField\": (GDAL >= 1.11) true if this layer can create new geometry fields on the current layer using CreateGeomField(), otherwise false.\nOLCDeleteField / \"DeleteField\": true if this layer can delete existing fields on the current layer using DeleteField(), otherwise false.\nOLCReorderFields / \"ReorderFields\": true if this layer can reorder existing fields on the current layer using ReorderField() or ReorderFields(), otherwise false.\nOLCAlterFieldDefn / \"AlterFieldDefn\": true if this layer can alter the definition of an existing field on the current layer using AlterFieldDefn(), otherwise false.\nOLCDeleteFeature / \"DeleteFeature\": true if the DeleteFeature() method is supported on this layer, otherwise false.\nOLCStringsAsUTF8 / \"StringsAsUTF8\": true if values of OFTString fields are assured to be in UTF-8 format. If false the encoding of fields is uncertain, though it might still be UTF-8.\nOLCTransactions / \"Transactions\": true if the StartTransaction(), CommitTransaction() and RollbackTransaction() methods work in a meaningful way, otherwise false.\nOLCIgnoreFields / \"IgnoreFields\": true if fields, geometry and style will be omitted when fetching features as set by SetIgnoredFields() method.\nOLCCurveGeometries / \"CurveGeometries\": true if this layer supports writing curve geometries or may return such geometries. (GDAL 2.0).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createfeature-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.unsafe_createfeature","text":"unsafe_createfeature(layer::AbstractFeatureLayer)\n\nCreate and returns a new feature based on the layer definition.\n\nThe newly feature is owned by the layer (it will increase the number of features the layer by one), but the feature has not been written to the layer yet.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_getfeature-Tuple{ArchGDAL.AbstractFeatureLayer, Integer}","page":"API Reference","title":"ArchGDAL.unsafe_getfeature","text":"unsafe_getfeature(layer::AbstractFeatureLayer, i::Integer)\n\nReturn a feature (now owned by the caller) by its identifier or NULL on failure.\n\nParameters\n\nlayer: the feature layer to be read from.\ni: the index of the feature to be returned.\n\nRemarks\n\nThis function will attempt to read the identified feature. The nFID value cannot be OGRNullFID. Success or failure of this operation is unaffected by the spatial or attribute filters (and specialized implementations in drivers should make sure that they do not take into account spatial or attribute filters).\n\nIf this function returns a non-NULL feature, it is guaranteed that its feature id (OGRFGetFID()) will be the same as nFID.\n\nUse OGRLTestCapability(OLCRandomRead) to establish if this layer supports efficient random access reading via OGRLGetFeature(); however, the call should always work if the feature exists as a fallback implementation just scans all the features in the layer looking for the desired feature.\n\nSequential reads (with OGRLGetNextFeature()) are generally considered interrupted by a OGRLGetFeature() call.\n\nThe returned feature is now owned by the caller, and should be freed with destroy().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_nextfeature-Tuple{ArchGDAL.AbstractFeatureLayer}","page":"API Reference","title":"ArchGDAL.unsafe_nextfeature","text":"unsafe_nextfeature(layer::AbstractFeatureLayer)\n\nFetch the next available feature from this layer.\n\nParameters\n\nlayer: the feature layer to be read from.\n\nRemarks\n\nThis method implements sequential access to the features of a layer. The resetreading!() method can be used to start at the beginning again. Only features matching the current spatial filter (set with setspatialfilter!()) will be returned.\n\nThe returned feature becomes the responsibility of the caller to delete with destroy(). It is critical that all features associated with a FeatureLayer (more specifically a FeatureDefn) be destroyed before that layer is destroyed.\n\nFeatures returned by nextfeature() may or may not be affected by concurrent modifications depending on drivers. A guaranteed way of seeing modifications in effect is to call resetreading!() on layers where nextfeature() has been called, before reading again. Structural changes in layers (field addition, deletion, ...) when a read is in progress may or may not be possible depending on drivers. If a transaction is committed/aborted, the current sequential reading may or may not be valid after that operation and a call to resetreading!() might be needed.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.FieldDefn}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy a field definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.GeomFieldDefn}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy a geometry field definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.IGeomFieldDefnView}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy a geometry field definition view.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getdefault-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getdefault","text":"getdefault(fielddefn::AbstractFieldDefn)\n\nGet default field value\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getfieldtype-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getfieldtype","text":"getfieldtype(fielddefn::AbstractFieldDefn)\n\nReturns the type or subtype (if any) of this field.\n\nParameters\n\nfielddefn: handle to the field definition.\n\nReturns\n\nThe field type or subtype.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc50ogrfield_subtype.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getjustify-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getjustify","text":"getjustify(fielddefn::AbstractFieldDefn)\n\nGet the justification for this field.\n\nNote: no driver is know to use the concept of field justification.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getname","text":"Fetch the name of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getname-Tuple{ArchGDAL.AbstractGeomFieldDefn}","page":"API Reference","title":"ArchGDAL.getname","text":"Fetch name of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getprecision-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getprecision","text":"getprecision(fielddefn::AbstractFieldDefn)\n\nGet the formatting precision for this field.\n\nThis should normally be zero for fields of types other than OFTReal.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getspatialref-Tuple{ArchGDAL.AbstractGeomFieldDefn}","page":"API Reference","title":"ArchGDAL.getspatialref","text":"getspatialref(geomdefn::AbstractGeomFieldDefn)\n\nReturns a clone of the spatial reference system for this field. May be NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getsubtype-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getsubtype","text":"getsubtype(fielddefn::AbstractFieldDefn)\n\nFetch subtype of this field.\n\nParameters\n\nfielddefn: handle to the field definition to get subtype from.\n\nReturns\n\nfield subtype.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.gettype-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.gettype","text":"Fetch the type of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.gettype-Tuple{ArchGDAL.AbstractGeomFieldDefn}","page":"API Reference","title":"ArchGDAL.gettype","text":"Fetch geometry type of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getwidth-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.getwidth","text":"getwidth(fielddefn::AbstractFieldDefn)\n\nGet the formatting width for this field.\n\nReturns\n\nthe width, zero means no specified width.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isdefaultdriverspecific-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.isdefaultdriverspecific","text":"isdefaultdriverspecific(fielddefn::AbstractFieldDefn)\n\nReturns whether the default value is driver specific.\n\nDriver specific default values are those that are not NULL, a numeric value, a literal value enclosed between single quote characters, CURRENTTIMESTAMP, CURRENTTIME, CURRENT_DATE or datetime literal value.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isignored-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.isignored","text":"isignored(fielddefn::AbstractFieldDefn)\n\nReturn whether this field should be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isignored-Tuple{ArchGDAL.AbstractGeomFieldDefn}","page":"API Reference","title":"ArchGDAL.isignored","text":"isignored(geomdefn::AbstractGeomFieldDefn)\n\nReturn whether this field should be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isnullable-Tuple{ArchGDAL.AbstractFieldDefn}","page":"API Reference","title":"ArchGDAL.isnullable","text":"isnullable(fielddefn::AbstractFieldDefn)\n\nReturn whether this field can receive null values.\n\nBy default, fields are nullable.\n\nEven if this method returns false (i.e not-nullable field), it doesn't mean that OGRFeature::IsFieldSet() will necessarily return true, as fields can be temporarily unset and null/not-null validation is usually done when OGRLayer::CreateFeature()/SetFeature() is called.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isnullable-Tuple{ArchGDAL.AbstractGeomFieldDefn}","page":"API Reference","title":"ArchGDAL.isnullable","text":"isnullable(geomdefn::AbstractGeomFieldDefn)\n\nReturn whether this geometry field can receive null values.\n\nBy default, fields are nullable.\n\nEven if this method returns false (i.e not-nullable field), it doesn't mean that OGRFeature::IsFieldSet() will necessary return true, as fields can be temporarily unset and null/not-null validation is usually done when OGRLayer::CreateFeature()/SetFeature() is called.\n\nNote that not-nullable geometry fields might also contain 'empty' geometries.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setdefault!-Union{Tuple{T}, Tuple{T, Any}} where T<:ArchGDAL.AbstractFieldDefn","page":"API Reference","title":"ArchGDAL.setdefault!","text":"setdefault!(fielddefn::AbstractFieldDefn, default)\n\nSet default field value.\n\nThe default field value is taken into account by drivers (generally those with a SQL interface) that support it at field creation time. OGR will generally not automatically set the default field value to null fields by itself when calling OGRFeature::CreateFeature() / OGRFeature::SetFeature(), but will let the low-level layers to do the job. So retrieving the feature from the layer is recommended.\n\nThe accepted values are NULL, a numeric value, a literal value enclosed between single quote characters (and inner single quote characters escaped by repetition of the single quote character), CURRENTTIMESTAMP, CURRENTTIME, CURRENT_DATE or a driver specific expression (that might be ignored by other drivers). For a datetime literal value, format should be 'YYYY/MM/DD HH:MM:SS[.sss]' (considered as UTC time).\n\nDrivers that support writing DEFAULT clauses will advertize the GDALDCAPDEFAULT_FIELDS driver metadata item.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setignored!-Tuple{ArchGDAL.FieldDefn, Bool}","page":"API Reference","title":"ArchGDAL.setignored!","text":"setignored!(fielddefn::FieldDefn, ignore::Bool)\n\nSet whether this field should be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setignored!-Tuple{ArchGDAL.GeomFieldDefn, Bool}","page":"API Reference","title":"ArchGDAL.setignored!","text":"setignored!(geomdefn::GeomFieldDefn, ignore::Bool)\n\nSet whether this field should be omitted when fetching features.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setjustify!-Tuple{ArchGDAL.FieldDefn, ArchGDAL.OGRJustification}","page":"API Reference","title":"ArchGDAL.setjustify!","text":"setjustify!(fielddefn::FieldDefn, ejustify::OGRJustification)\n\nSet the justification for this field.\n\nNote: no driver is know to use the concept of field justification.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setname!-Tuple{ArchGDAL.FieldDefn, AbstractString}","page":"API Reference","title":"ArchGDAL.setname!","text":"Set the name of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setname!-Tuple{ArchGDAL.GeomFieldDefn, AbstractString}","page":"API Reference","title":"ArchGDAL.setname!","text":"Set the name of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setnullable!-Tuple{ArchGDAL.GeomFieldDefn, Bool}","page":"API Reference","title":"ArchGDAL.setnullable!","text":"setnullable!(geomdefn::GeomFieldDefn, nullable::Bool)\n\nSet whether this geometry field can receive null values.\n\nBy default, fields are nullable, so this method is generally called with false to set a not-null constraint.\n\nDrivers that support writing not-null constraint will advertize the GDALDCAPNOTNULL_GEOMFIELDS driver metadata item.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setnullable!-Union{Tuple{T}, Tuple{T, Bool}} where T<:ArchGDAL.AbstractFieldDefn","page":"API Reference","title":"ArchGDAL.setnullable!","text":"setnullable!(fielddefn::FieldDefn, nullable::Bool)\n\nSet whether this field can receive null values.\n\nBy default, fields are nullable, so this method is generally called with false to set a not-null constraint.\n\nDrivers that support writing not-null constraint will advertize the GDALDCAPNOTNULL_FIELDS driver metadata item.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc53ogrnotnull_default.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setparams!-Tuple{ArchGDAL.FieldDefn, AbstractString, ArchGDAL.OGRFieldType}","page":"API Reference","title":"ArchGDAL.setparams!","text":"setparams!(fielddefn, name, etype, [nwidth, [nprecision, [justify]]])\n\nSet defining parameters for a field in one call.\n\nParameters\n\nfielddefn: the field definition to set to.\nname: the new name to assign.\netype: the new type (one of the OFT values like OFTInteger).\nnwidth: the preferred formatting width. 0 (default) indicates undefined.\nnprecision: number of decimals for formatting. 0 (default) for undefined.\njustify: the formatting justification ([OJUndefined], OJLeft or OJRight)\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setprecision!-Tuple{ArchGDAL.FieldDefn, Integer}","page":"API Reference","title":"ArchGDAL.setprecision!","text":"setprecision!(fielddefn::FieldDefn, precision::Integer)\n\nSet the formatting precision for this field in characters.\n\nThis should normally be zero for fields of types other than OFTReal.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setspatialref!-Tuple{ArchGDAL.GeomFieldDefn, ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.setspatialref!","text":"setspatialref!(geomdefn::GeomFieldDefn, spatialref::AbstractSpatialRef)\n\nSet the spatial reference of this field.\n\nThis function drops the reference of the previously set SRS object and acquires a new reference on the passed object (if non-NULL).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setsubtype!-Tuple{ArchGDAL.FieldDefn, ArchGDAL.OGRFieldSubType}","page":"API Reference","title":"ArchGDAL.setsubtype!","text":"setsubtype!(fielddefn::FieldDefn, subtype::OGRFieldSubType)\n\nSet the subtype of this field.\n\nThis should never be done to an OGRFieldDefn that is already part of an OGRFeatureDefn.\n\nParameters\n\nfielddefn: handle to the field definition to set type to.\nsubtype: the new field subtype.\n\nReferences\n\nhttps://gdal.org/development/rfc/rfc50ogrfield_subtype.html\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.settype!-Tuple{ArchGDAL.FieldDefn, ArchGDAL.OGRFieldType}","page":"API Reference","title":"ArchGDAL.settype!","text":"Set the type of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.settype!-Tuple{ArchGDAL.GeomFieldDefn, ArchGDAL.OGRwkbGeometryType}","page":"API Reference","title":"ArchGDAL.settype!","text":"Set the geometry type of this field.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setwidth!-Tuple{ArchGDAL.FieldDefn, Integer}","page":"API Reference","title":"ArchGDAL.setwidth!","text":"setwidth!(fielddefn::FieldDefn, width::Integer)\n\nSet the formatting width for this field in characters.\n\nThis should never be done to an OGRFieldDefn that is already part of an OGRFeatureDefn.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createfielddefn-Tuple{AbstractString, ArchGDAL.OGRFieldType}","page":"API Reference","title":"ArchGDAL.unsafe_createfielddefn","text":"unsafe_createfielddefn(name::AbstractString, etype::OGRFieldType)\n\nCreate a new field definition.\n\nBy default, fields have no width, precision, are nullable and not ignored.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_creategeomdefn-Tuple{AbstractString, ArchGDAL.OGRwkbGeometryType}","page":"API Reference","title":"ArchGDAL.unsafe_creategeomdefn","text":"unsafe_creategeomdefn(name::AbstractString, etype::OGRwkbGeometryType)\n\nCreate a new field geometry definition.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addgeom!-Union{Tuple{G}, Tuple{G, ArchGDAL.AbstractGeometry}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.addgeom!","text":"addgeom!(geomcontainer::AbstractGeometry, subgeom::AbstractGeometry)\n\nAdd a geometry to a geometry container.\n\nSome subclasses of OGRGeometryCollection restrict the types of geometry that can be added, and may return an error. The passed geometry is cloned to make an internal copy.\n\nFor a polygon, subgeom must be a linearring. If the polygon is empty, the first added subgeometry will be the exterior ring. The next ones will be the interior rings.\n\nParameters\n\ngeomcontainer: existing geometry.\nsubgeom: geometry to add to the existing geometry.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addpoint!","page":"API Reference","title":"ArchGDAL.addpoint!","text":"addpoint!(geom::AbstractGeometry, x, y)\naddpoint!(geom::AbstractGeometry, x, y, z)\n\nAdd a point to a geometry (line string or point).\n\nParameters\n\ngeom: the geometry to add a point to.\nx: x coordinate of point to add.\ny: y coordinate of point to add.\nz: z coordinate of point to add.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.boundary-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.boundary","text":"boundary(geom::AbstractGeometry)\n\nReturns the boundary of the geometry.\n\nA new geometry object is created and returned containing the boundary of the geometry on which the method is invoked.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.boundingbox-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.boundingbox","text":"boundingbox(geom::AbstractGeometry)\n\nReturns a bounding box polygon (CW) built from envelope coordinates\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.buffer","page":"API Reference","title":"ArchGDAL.buffer","text":"buffer(geom::AbstractGeometry, dist::Real, quadsegs::Integer = 30)\n\nCompute buffer of geometry.\n\nBuilds a new geometry containing the buffer region around the geometry on which it is invoked. The buffer is a polygon containing the region within the buffer distance of the original geometry.\n\nSome buffer sections are properly described as curves, but are converted to approximate polygons. The nQuadSegs parameter can be used to control how many segments should be used to define a 90 degree curve - a quadrant of a circle. A value of 30 is a reasonable default. Large values result in large numbers of vertices in the resulting buffer geometry while small numbers reduce the accuracy of the result.\n\nParameters\n\ngeom: the geometry.\ndist: the buffer distance to be applied. Should be expressed into the same unit as the coordinates of the geometry.\nquadsegs: the number of segments used to approximate a 90 degree (quadrant) of curvature.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.centroid!-Union{Tuple{G}, Tuple{ArchGDAL.AbstractGeometry, G}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.centroid!","text":"centroid!(geom::AbstractGeometry, centroid::AbstractGeometry)\n\nCompute the geometry centroid.\n\nThe centroid location is applied to the passed in OGRPoint object. The centroid is not necessarily within the geometry.\n\nThis method relates to the SFCOM ISurface::get_Centroid() method however the current implementation based on GEOS can operate on other geometry types such as multipoint, linestring, geometrycollection such as multipolygons. OGC SF SQL 1.1 defines the operation for surfaces (polygons). SQL/MM-Part 3 defines the operation for surfaces and multisurfaces (multipolygons).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.centroid-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.centroid","text":"centroid(geom::AbstractGeometry)\n\nCompute the geometry centroid.\n\nThe centroid is not necessarily within the geometry.\n\n(This method relates to the SFCOM ISurface::get_Centroid() method however the current implementation based on GEOS can operate on other geometry types such as multipoint, linestring, geometrycollection such as multipolygons. OGC SF SQL 1.1 defines the operation for surfaces (polygons). SQL/MM-Part 3 defines the operation for surfaces and multisurfaces (multipolygons).)\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.clone-Union{Tuple{ArchGDAL.AbstractGeometry{T}}, Tuple{T}} where T","page":"API Reference","title":"ArchGDAL.clone","text":"clone(geom::AbstractGeometry)\n\nReturns a copy of the geometry with the original spatial reference system.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.closerings!-Tuple{G} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.closerings!","text":"closerings!(geom::AbstractGeometry)\n\nForce rings to be closed.\n\nIf this geometry, or any contained geometries has polygon rings that are not closed, they will be closed by adding the starting point at the end.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.contains-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.contains","text":"contains(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if g1 contains g2.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.convexhull-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.convexhull","text":"convexhull(geom::AbstractGeometry)\n\nReturns the convex hull of the geometry.\n\nA new geometry object is created and returned containing the convex hull of the geometry on which the method is invoked.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.creategeom-Tuple{ArchGDAL.OGRwkbGeometryType}","page":"API Reference","title":"ArchGDAL.creategeom","text":"creategeom(geomtype::OGRwkbGeometryType)\n\nCreate an empty geometry of desired type.\n\nThis is equivalent to allocating the desired geometry with new, but the allocation is guaranteed to take place in the context of the GDAL/OGR heap.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.crosses-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.crosses","text":"crosses(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if the geometries are crossing.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.curvegeom-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.curvegeom","text":"curvegeom(geom::AbstractGeometry)\n\nReturn curve version of this geometry.\n\nReturns a geometry that has possibly CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON, MULTICURVE or MULTISURFACE in it, by de-approximating linear into curve geometries.\n\nIf the geometry has no curve portion, the returned geometry will be a clone.\n\nThe reverse function is OGRGGetLinearGeometry().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.delaunaytriangulation-Tuple{ArchGDAL.AbstractGeometry, Real, Bool}","page":"API Reference","title":"ArchGDAL.delaunaytriangulation","text":"delaunaytriangulation(geom::AbstractGeometry, tol::Real, onlyedges::Bool)\n\nReturn a Delaunay triangulation of the vertices of the geometry.\n\nParameters\n\ngeom: the geometry.\ntol: optional snapping tolerance to use for improved robustness\nonlyedges: if true, will return a MULTILINESTRING, otherwise it will return a GEOMETRYCOLLECTION containing triangular POLYGONs.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy geometry object.\n\nEquivalent to invoking delete on a geometry, but it guaranteed to take place within the context of the GDAL/OGR heap.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.AbstractPreparedGeometry}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy prepared geometry object.\n\nEquivalent to invoking delete on a prepared geometry, but it guaranteed to take place within the context of the GDAL/OGR heap.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.difference-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.difference","text":"difference(g1::AbstractGeometry, g2::AbstractGeometry)\n\nGenerates a new geometry which is the region of this geometry with the region of the other geometry removed.\n\nReturns\n\nA new geometry representing the difference of the geometries, or NULL if the difference is empty.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.disjoint-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.disjoint","text":"disjoint(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if the geometries are disjoint.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.distance-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.distance","text":"distance(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns the distance between the geometries or -1 if an error occurs.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.empty!-Tuple{G} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.empty!","text":"empty!(geom::AbstractGeometry)\n\nClear geometry information.\n\nThis restores the geometry to its initial state after construction, and before assignment of actual geometry.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.envelope-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.envelope","text":"envelope(geom::AbstractGeometry)\n\nComputes and returns the bounding envelope for this geometry.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.envelope3d-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.envelope3d","text":"envelope3d(geom::AbstractGeometry)\n\nComputes and returns the bounding envelope (3D) for this geometry\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.equals-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.equals","text":"equals(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if the geometries are equivalent.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.flattento2d!-Tuple{G} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.flattento2d!","text":"flattento2d!(geom::AbstractGeometry)\n\nConvert geometry to strictly 2D.\n\nThe return value will have a new type, do not continue using the original object.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.forceto","page":"API Reference","title":"ArchGDAL.forceto","text":"forceto(geom::AbstractGeometry, targettype::OGRwkbGeometryType, [options])\n\nTries to force the provided geometry to the specified geometry type.\n\nParameters\n\ngeom: the input geometry.\ntargettype: target output geometry type.\n\noptions: (optional) options as a null-terminated vector of strings\n\nIt can promote 'single' geometry type to their corresponding collection type (see OGRGTGetCollection()) or the reverse. non-linear geometry type to their corresponding linear geometry type (see OGRGTGetLinear()), by possibly approximating circular arcs they may contain. Regarding conversion from linear geometry types to curve geometry types, only \"wraping\" will be done. No attempt to retrieve potential circular arcs by de-approximating stroking will be done. For that, OGRGeometry::getCurveGeometry() can be used.\n\nThe passed in geometry is cloned and a new one returned.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.fromGML-Tuple{Any}","page":"API Reference","title":"ArchGDAL.fromGML","text":"fromGML(data)\n\nCreate geometry from GML.\n\nThis method translates a fragment of GML containing only the geometry portion into a corresponding OGRGeometry. There are many limitations on the forms of GML geometries supported by this parser, but they are too numerous to list here.\n\nThe following GML2 elements are parsed : Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, MultiGeometry.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.fromJSON-Tuple{String}","page":"API Reference","title":"ArchGDAL.fromJSON","text":"fromJSON(data::String)\n\nCreate a geometry object from its GeoJSON representation.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.fromWKB-Tuple{Any}","page":"API Reference","title":"ArchGDAL.fromWKB","text":"fromWKB(data)\n\nCreate a geometry object of the appropriate type from it's well known binary (WKB) representation.\n\nParameters\n\ndata: pointer to the input BLOB data.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.fromWKT-Tuple{Vector{String}}","page":"API Reference","title":"ArchGDAL.fromWKT","text":"fromWKT(data::Vector{String})\n\nCreate a geometry object of the appropriate type from its well known text (WKT) representation.\n\nParameters\n\ndata: input zero terminated string containing WKT representation of the geometry to be created. The pointer is updated to point just beyond that last character consumed.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.geomarea-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.geomarea","text":"geomarea(geom::AbstractGeometry)\n\nReturns the area of the geometry or 0.0 for unsupported geometry types.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.geomdim-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.geomdim","text":"geomdim(geom::AbstractGeometry)\n\nGet the dimension of the geometry. 0 for points, 1 for lines and 2 for surfaces.\n\nThis function corresponds to the SFCOM IGeometry::GetDimension() method. It indicates the dimension of the geometry, but does not indicate the dimension of the underlying space (as indicated by OGRGGetCoordinateDimension() function).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.geomlength-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.geomlength","text":"geomlength(geom::AbstractGeometry)\n\nReturns the length of the geometry, or 0.0 for unsupported geometry types.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.geomname-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.geomname","text":"geomname(geom::AbstractGeometry)\n\nFetch WKT name for geometry type.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getcoorddim-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.getcoorddim","text":"getcoorddim(geom::AbstractGeometry)\n\nGet the dimension of the coordinates in this geometry.\n\nReturns\n\nThis will return 2 or 3.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeom-Tuple{ArchGDAL.AbstractGeometry, Integer}","page":"API Reference","title":"ArchGDAL.getgeom","text":"getgeom(geom::AbstractGeometry, i::Integer)\n\nFetch geometry from a geometry container.\n\nFor a polygon, getgeom(polygon,i) returns the exterior ring if i == 0, and the interior rings for i > 0.\n\nParameters\n\ngeom: the geometry container from which to get a geometry from.\ni: index of the geometry to fetch, between 0 and ngeom() - 1.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getgeomtype-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.getgeomtype","text":"getgeomtype(geom::AbstractGeometry)\n\nFetch geometry type code\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getm-Tuple{ArchGDAL.AbstractGeometry, Integer}","page":"API Reference","title":"ArchGDAL.getm","text":"getm(geom::AbstractGeometry, i::Integer)\n\nFetch the m coordinate of a point from a geometry, at index i.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getnonlineargeomflag-Tuple{}","page":"API Reference","title":"ArchGDAL.getnonlineargeomflag","text":"getnonlineargeomflag()\n\nGet flag to enable/disable returning non-linear geometries in the C API.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getpoint-Tuple{ArchGDAL.AbstractGeometry, Integer}","page":"API Reference","title":"ArchGDAL.getpoint","text":"getpoint(geom::AbstractGeometry, i::Integer)\n\nFetch a point in line string or a point geometry, at index i.\n\nParameters\n\ni: the vertex to fetch, from 0 to ngeom()-1, zero for a point.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getspatialref-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.getspatialref","text":"getspatialref(geom::AbstractGeometry)\n\nReturns a clone of the spatial reference system for the geometry.\n\n(The original SRS may be shared with many objects, and should not be modified.)\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getx-Tuple{ArchGDAL.AbstractGeometry, Integer}","page":"API Reference","title":"ArchGDAL.getx","text":"getx(geom::AbstractGeometry, i::Integer)\n\nFetch the x coordinate of a point from a geometry, at index i.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.gety-Tuple{ArchGDAL.AbstractGeometry, Integer}","page":"API Reference","title":"ArchGDAL.gety","text":"gety(geom::AbstractGeometry, i::Integer)\n\nFetch the y coordinate of a point from a geometry, at index i.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getz-Tuple{ArchGDAL.AbstractGeometry, Integer}","page":"API Reference","title":"ArchGDAL.getz","text":"getz(geom::AbstractGeometry, i::Integer)\n\nFetch the z coordinate of a point from a geometry, at index i.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.has_preparedgeom_support-Tuple{}","page":"API Reference","title":"ArchGDAL.has_preparedgeom_support","text":"haspreparedgeomsupport()\n\nCheck whether the current GDAL instance has support for prepared geometries.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.hascurvegeom-Tuple{ArchGDAL.AbstractGeometry, Bool}","page":"API Reference","title":"ArchGDAL.hascurvegeom","text":"hascurvegeom(geom::AbstractGeometry, nonlinear::Bool)\n\nReturns if this geometry is or has curve geometry.\n\nParameters\n\ngeom: the geometry to operate on.\nnonlinear: set it to true to check if the geometry is or contains a CIRCULARSTRING.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.intersection-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.intersection","text":"intersection(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns a new geometry representing the intersection of the geometries, or NULL if there is no intersection or an error occurs.\n\nGenerates a new geometry which is the region of intersection of the two geometries operated on. The OGRGIntersects() function can be used to test if two geometries intersect.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.intersects-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.intersects","text":"intersects(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns whether the geometries intersect\n\nDetermines whether two geometries intersect. If GEOS is enabled, then this is done in rigorous fashion otherwise true is returned if the envelopes (bounding boxes) of the two geometries overlap.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.is3d-Tuple{Union{ArchGDAL.AbstractGeometry{ArchGDAL.wkbPoint}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbLineString}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolygon}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPoint}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiLineString}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPolygon}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbGeometryCollection}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCircularString}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCompoundCurve}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurvePolygon}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiCurve}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiSurface}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurve}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbSurface}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolyhedralSurface}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTIN}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTriangle}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbNone}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbLinearRing}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPointM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbLineStringM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolygonM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPointM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiLineStringM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPolygonM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbGeometryCollectionM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCircularStringM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCompoundCurveM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurvePolygonM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiCurveM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiSurfaceM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurveM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbSurfaceM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolyhedralSurfaceM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTINM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTriangleM}}}","page":"API Reference","title":"ArchGDAL.is3d","text":"is3d(geom::AbstractGeometry)\n\nReturns true if the geometry has a z coordinate, otherwise false.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isempty-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.isempty","text":"isempty(geom::AbstractGeometry)\n\nReturns true if the geometry has no points, otherwise false.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ismeasured-Tuple{Union{ArchGDAL.AbstractGeometry{ArchGDAL.wkbPointM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbLineStringM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolygonM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPointM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiLineStringM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPolygonM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbGeometryCollectionM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCircularStringM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCompoundCurveM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurvePolygonM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiCurveM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiSurfaceM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurveM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbSurfaceM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolyhedralSurfaceM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTINM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTriangleM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPointZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbLineStringZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolygonZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPointZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiLineStringZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiPolygonZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbGeometryCollectionZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCircularStringZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCompoundCurveZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurvePolygonZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiCurveZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbMultiSurfaceZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbCurveZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbSurfaceZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbPolyhedralSurfaceZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTINZM}, ArchGDAL.AbstractGeometry{ArchGDAL.wkbTriangleZM}}}","page":"API Reference","title":"ArchGDAL.ismeasured","text":"ismeasured(geom::AbstractGeometry)\n\nReturns true if the geometry has a m coordinate, otherwise false.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isring-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.isring","text":"isring(geom::AbstractGeometry)\n\nReturns true if the geometry is a ring, otherwise false.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.issimple-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.issimple","text":"issimple(geom::AbstractGeometry)\n\nReturns true if the geometry is simple, otherwise false.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.isvalid-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.isvalid","text":"isvalid(geom::AbstractGeometry)\n\nReturns true if the geometry is valid, otherwise false.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ngeom-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.ngeom","text":"ngeom(geom::AbstractGeometry)\n\nThe number of elements in a geometry or number of geometries in container.\n\nThis corresponds to\n\nOGR_G_GetPointCount for wkbPoint[25D] or wkbLineString[25D],\nOGR_G_GetGeometryCount for geometries of type wkbPolygon[25D], wkbMultiPoint[25D], wkbMultiLineString[25D], wkbMultiPolygon[25D] or wkbGeometryCollection[25D], and\n0 for other geometry types.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.overlaps-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.overlaps","text":"overlaps(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if the geometries overlap.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.pointalongline-Tuple{ArchGDAL.AbstractGeometry, Real}","page":"API Reference","title":"ArchGDAL.pointalongline","text":"pointalongline(geom::AbstractGeometry, distance::Real)\n\nFetch point at given distance along curve.\n\nParameters\n\ngeom: curve geometry.\ndistance: distance along the curve at which to sample position. This distance should be between zero and geomlength() for this curve.\n\nReturns\n\na point or NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.pointonsurface-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.pointonsurface","text":"pointonsurface(geom::AbstractGeometry)\n\nReturns a point guaranteed to lie on the surface.\n\nThis method relates to the SFCOM ISurface::get_PointOnSurface() method however the current implementation based on GEOS can operate on other geometry types than the types that are supported by SQL/MM-Part 3 : surfaces (polygons) and multisurfaces (multipolygons).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.polygonfromedges-Tuple{ArchGDAL.AbstractGeometry, Real}","page":"API Reference","title":"ArchGDAL.polygonfromedges","text":"polygonfromedges(lines::AbstractGeometry, tol::Real; besteffort = false,\n autoclose = false)\n\nBuild a ring from a bunch of arcs.\n\nParameters\n\nlines: handle to an OGRGeometryCollection (or OGRMultiLineString) containing the line string geometries to be built into rings.\ntol: whether two arcs are considered close enough to be joined.\n\nKeyword Arguments\n\nbesteffort: (defaults to false) not yet implemented???.\nautoclose: indicates if the ring should be close when first and last points of the ring are the same. (defaults to false)\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.polygonize-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.polygonize","text":"polygonize(geom::AbstractGeometry)\n\nPolygonizes a set of sparse edges.\n\nA new geometry object is created and returned containing a collection of reassembled Polygons: NULL will be returned if the input collection doesn't correspond to a MultiLinestring, or when reassembling Edges into Polygons is impossible due to topological inconsistencies.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.preparegeom-Union{Tuple{ArchGDAL.AbstractGeometry{T}}, Tuple{T}} where T","page":"API Reference","title":"ArchGDAL.preparegeom","text":"preparegeom(geom::AbstractGeometry)\n\nCreate an prepared geometry of a geometry. This can speed up operations which interact with the geometry multiple times, by storing caches of calculated geometry information.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.removeallgeoms!-Union{Tuple{G}, Tuple{G, Bool}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.removeallgeoms!","text":"removeallgeoms!(geom::AbstractGeometry, todelete::Bool = true)\n\nRemove all geometries from an exiting geometry container.\n\nParameters\n\ngeom: the existing geometry to delete from.\ntodelete: if true the geometry will be destroyed, otherwise it will not. The default is true as the existing geometry is considered to own the geometries in it.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.removegeom!-Union{Tuple{G}, Tuple{G, Integer}, Tuple{G, Integer, Bool}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.removegeom!","text":"removegeom!(geom::AbstractGeometry, i::Integer, todelete::Bool = true)\n\nRemove a geometry from an exiting geometry container.\n\nParameters\n\ngeom: the existing geometry to delete from.\ni: the index of the geometry to delete. A value of -1 is a special flag meaning that all geometries should be removed.\ntodelete: if true the geometry will be destroyed, otherwise it will not. The default is true as the existing geometry is considered to own the geometries in it.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.segmentize!-Union{Tuple{G}, Tuple{G, Real}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.segmentize!","text":"segmentize!(geom::AbstractGeometry, maxlength::Real)\n\nModify the geometry such it has no segment longer than the given distance.\n\nInterpolated points will have Z and M values (if needed) set to 0. Distance computation is performed in 2d only\n\nParameters\n\ngeom: the geometry to segmentize\nmaxlength: the maximum distance between 2 points after segmentization\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setcoorddim!-Union{Tuple{G}, Tuple{G, Integer}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.setcoorddim!","text":"setcoorddim!(geom::AbstractGeometry, dim::Integer)\n\nSet the coordinate dimension.\n\nThis method sets the explicit coordinate dimension. Setting the coordinate dimension of a geometry to 2 should zero out any existing Z values. Setting the dimension of a geometry collection, a compound curve, a polygon, etc. will affect the children geometries. This will also remove the M dimension if present before this call.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setnonlineargeomflag!-Tuple{Bool}","page":"API Reference","title":"ArchGDAL.setnonlineargeomflag!","text":"setnonlineargeomflag!(flag::Bool)\n\nSet flag to enable/disable returning non-linear geometries in the C API.\n\nThis flag has only an effect on the OGRFGetGeometryRef(), OGRFGetGeomFieldRef(), OGRLGetGeomType(), OGRGFldGetType() and OGRFDGetGeomType() C API methods. It is meant as making it simple for applications using the OGR C API not to have to deal with non-linear geometries, even if such geometries might be returned by drivers. In which case, they will be transformed into their closest linear geometry, by doing linear approximation, with OGRGForceTo().\n\nLibraries should generally not use that method, since that could interfere with other libraries or applications.\n\nParameters\n\nflag: true if non-linear geometries might be returned (default value). false to ask for non-linear geometries to be approximated as linear geometries.\n\nReturns\n\na point or NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setpoint!","page":"API Reference","title":"ArchGDAL.setpoint!","text":"setpoint!(geom::AbstractGeometry, i::Integer, x, y)\nsetpoint!(geom::AbstractGeometry, i::Integer, x, y, z)\n\nSet the location of a vertex in a point or linestring geometry.\n\nParameters\n\ngeom: handle to the geometry to add a vertex to.\ni: the index of the vertex to assign (zero based) or zero for a point.\nx: input X coordinate to assign.\ny: input Y coordinate to assign.\nz: input Z coordinate to assign (defaults to zero).\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.setpointcount!-Union{Tuple{G}, Tuple{G, Integer}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.setpointcount!","text":"setpointcount!(geom::AbstractGeometry, n::Integer)\n\nSet number of points in a geometry.\n\nParameters\n\ngeom: the geometry.\nn: the new number of points for geometry.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.simplify-Tuple{ArchGDAL.AbstractGeometry, Real}","page":"API Reference","title":"ArchGDAL.simplify","text":"simplify(geom::AbstractGeometry, tol::Real)\n\nCompute a simplified geometry.\n\nParameters\n\ngeom: the geometry.\ntol: the distance tolerance for the simplification.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.simplifypreservetopology-Tuple{ArchGDAL.AbstractGeometry, Real}","page":"API Reference","title":"ArchGDAL.simplifypreservetopology","text":"simplifypreservetopology(geom::AbstractGeometry, tol::Real)\n\nSimplify the geometry while preserving topology.\n\nParameters\n\ngeom: the geometry.\ntol: the distance tolerance for the simplification.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.symdifference-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.symdifference","text":"symdifference(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns a new geometry representing the symmetric difference of the geometries or NULL if the difference is empty or an error occurs.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toGML-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.toGML","text":"toGML(geom::AbstractGeometry)\n\nConvert a geometry into GML format.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toISOWKB","page":"API Reference","title":"ArchGDAL.toISOWKB","text":"toISOWKB(geom::AbstractGeometry, order::OGRwkbByteOrder = wkbNDR)\n\nConvert a geometry into SFSQL 1.2 / ISO SQL/MM Part 3 well known binary format.\n\nParameters\n\ngeom: handle on the geometry to convert to a well know binary data from.\norder: One of wkbXDR or [wkbNDR] indicating MSB or LSB byte order resp.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.toISOWKT-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.toISOWKT","text":"toISOWKT(geom::AbstractGeometry)\n\nConvert a geometry into SFSQL 1.2 / ISO SQL/MM Part 3 well known text format.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toJSON-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.toJSON","text":"toJSON(geom::AbstractGeometry; kwargs...)\n\nConvert a geometry into GeoJSON format.\n\nThe following options are supported :\nCOORDINATE_PRECISION=number: maximum number of figures after decimal separator to write in coordinates.\nSIGNIFICANT_FIGURES=number: maximum number of significant figures.\n\nIf COORDINATEPRECISION is defined, SIGNIFICANTFIGURES will be ignored if\nspecified.\nWhen none are defined, the default is COORDINATE_PRECISION=15.\n\nParameters\n\ngeom: handle to the geometry.\n\nReturns\n\nA GeoJSON fragment or NULL in case of error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toKML","page":"API Reference","title":"ArchGDAL.toKML","text":"toKML(geom::AbstractGeometry, altitudemode = C_NULL)\n\nConvert a geometry into KML format.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.toWKB","page":"API Reference","title":"ArchGDAL.toWKB","text":"toWKB(geom::AbstractGeometry, order::OGRwkbByteOrder = wkbNDR)\n\nConvert a geometry well known binary format.\n\nParameters\n\ngeom: handle on the geometry to convert to a well know binary data from.\norder: One of wkbXDR or [wkbNDR] indicating MSB or LSB byte order resp.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.toWKT-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.toWKT","text":"toWKT(geom::AbstractGeometry)\n\nConvert a geometry into well known text format.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.touches-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.touches","text":"touches(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if the geometries are touching.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.transform!-Union{Tuple{G}, Tuple{G, ArchGDAL.CoordTransform}} where G<:ArchGDAL.AbstractGeometry","page":"API Reference","title":"ArchGDAL.transform!","text":"transform!(geom::AbstractGeometry, coordtransform::CoordTransform)\n\nApply arbitrary coordinate transformation to geometry.\n\nParameters\n\ngeom: handle on the geometry to apply the transform to.\ncoordtransform: handle on the transformation to apply.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.union-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.union","text":"union(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns a new geometry representing the union of the geometries.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.within-Tuple{ArchGDAL.AbstractGeometry, ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.within","text":"within(g1::AbstractGeometry, g2::AbstractGeometry)\n\nReturns true if g1 is contained within g2.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.wkbsize-Tuple{ArchGDAL.AbstractGeometry}","page":"API Reference","title":"ArchGDAL.wkbsize","text":"wkbsize(geom::AbstractGeometry)\n\nReturns size (in bytes) of related binary representation.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addpart!-Tuple{ArchGDAL.StyleManager, ArchGDAL.StyleTool}","page":"API Reference","title":"ArchGDAL.addpart!","text":"addpart!(stylemanager::StyleManager, styletool::StyleTool)\n\nAdd a part (style tool) to the current style.\n\nParameters\n\nstylemanager: handle to the style manager.\nstyletool: the style tool defining the part to add.\n\nReturns\n\ntrue on success, false on error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addstyle!-Tuple{ArchGDAL.StyleManager, AbstractString, AbstractString}","page":"API Reference","title":"ArchGDAL.addstyle!","text":"addstyle!(stylemanager::StyleManager, stylename, stylestring)\n\nAdd a style to the current style table.\n\nParameters\n\nstylemanager: handle to the style manager.\nstylename: the name of the style to add.\nstylestring: (optional) the style string to use, or (if not provided) to use the style stored in the manager.\n\nReturns\n\ntrue on success, false on error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.addstyle!-Tuple{ArchGDAL.StyleTable, AbstractString, AbstractString}","page":"API Reference","title":"ArchGDAL.addstyle!","text":"addstyle!(styletable::StyleTable, stylename, stylestring)\n\nAdd a new style in the table.\n\nParameters\n\nstyletable: handle to the style table.\nname: the name the style to add.\nstylestring: the style string to add.\n\nReturns\n\ntrue on success, false on error\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asdouble","page":"API Reference","title":"ArchGDAL.asdouble","text":"asdouble(styletool::StyleTool, id::Integer, nullflag = Ref{Cint}(0))\n\nGet Style Tool parameter value as a double.\n\nParameters\n\nstyletool: handle to the style tool.\nid: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)\nnullflag: pointer to an integer that will be set to true or false to indicate whether the parameter value is NULL.\n\nReturns\n\nthe parameter value as a double and sets nullflag.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.asint","page":"API Reference","title":"ArchGDAL.asint","text":"asint(styletool::StyleTool, id::Integer, nullflag = Ref{Cint}(0))\n\nGet Style Tool parameter value as an integer.\n\nParameters\n\nstyletool: handle to the style tool.\nid: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)\nnullflag: pointer to an integer that will be set to true or false to indicate whether the parameter value is NULL.\n\nReturns\n\nthe parameter value as an integer and sets nullflag.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.asstring-Tuple{ArchGDAL.StyleTool, Integer, Ref{Int32}}","page":"API Reference","title":"ArchGDAL.asstring","text":"asstring(styletool::StyleTool, id::Integer)\nasstring(styletool::StyleTool, id::Integer, nullflag::Ref{Cint})\n\nGet Style Tool parameter value as a string.\n\nParameters\n\nstyletool: handle to the style tool.\nid: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)\nnullflag: pointer to an integer that will be set to true or false to indicate whether the parameter value is NULL.\n\nReturns\n\nthe parameter value as a string and sets nullflag.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.StyleManager}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy Style Manager.\n\nParameters\n\nstylemanager: handle to the style manager to destroy.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.StyleTable}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy Style Table.\n\nParameters\n\nstyletable: handle to the style table to destroy.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.StyleTool}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroy Style Tool.\n\nParameters\n\nstyletool: handle to the style tool to destroy.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findstylestring-Tuple{ArchGDAL.StyleTable, AbstractString}","page":"API Reference","title":"ArchGDAL.findstylestring","text":"findstylestring(styletable::StyleTable, name::AbstractString)\n\nGet a style string by name.\n\nParameters\n\nstyletable: handle to the style table.\nname: the name of the style string to find.\n\nReturns\n\nthe style string matching the name or NULL if not found or error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getstylestring-Tuple{ArchGDAL.StyleTool}","page":"API Reference","title":"ArchGDAL.getstylestring","text":"getstylestring(styletool::StyleTool)\n\nGet the style string for this Style Tool.\n\nParameters\n\nstyletool: handle to the style tool.\n\nReturns\n\nthe style string for this style tool or \"\" if the styletool is invalid.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.gettype-Tuple{ArchGDAL.StyleTool}","page":"API Reference","title":"ArchGDAL.gettype","text":"gettype(styletool::StyleTool)\n\nDetermine type of Style Tool.\n\nParameters\n\nstyletool: handle to the style tool.\n\nReturns\n\nthe style tool type, one of OGRSTCPen (1), OGRSTCBrush (2), OGRSTCSymbol (3) or OGRSTCLabel (4). Returns OGRSTCNone (0) if the OGRStyleToolH is invalid.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getunit-Tuple{ArchGDAL.StyleTool}","page":"API Reference","title":"ArchGDAL.getunit","text":"getunit(styletool::StyleTool)\n\nGet Style Tool units.\n\nParameters\n\nstyletool: handle to the style tool.\n\nReturns\n\nthe style tool units.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.initialize!-Tuple{ArchGDAL.StyleManager, String}","page":"API Reference","title":"ArchGDAL.initialize!","text":"initialize!(stylemanager::StyleManager, stylestring = C_NULL)\n\nInitialize style manager from the style string.\n\nParameters\n\nstylemanager: handle to the style manager.\nstylestring: the style string to use (can be NULL).\n\nReturns\n\ntrue on success, false on error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.laststyle-Tuple{ArchGDAL.StyleTable}","page":"API Reference","title":"ArchGDAL.laststyle","text":"laststyle(styletable::StyleTable)\n\nGet the style name of the last style string fetched with OGRSTBLGetNextStyle.\n\nParameters\n\nstyletable: handle to the style table.\n\nReturns\n\nthe Name of the last style string or NULL on error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.loadstyletable!-Tuple{ArchGDAL.StyleTable, AbstractString}","page":"API Reference","title":"ArchGDAL.loadstyletable!","text":"loadstyletable!(styletable::StyleTable, filename::AbstractString)\n\nLoad a style table from a file.\n\nParameters\n\nstyletable: handle to the style table.\nfilename: the name of the file to load from.\n\nReturns\n\ntrue on success, false on error\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nextstyle-Tuple{ArchGDAL.StyleTable}","page":"API Reference","title":"ArchGDAL.nextstyle","text":"nextstyle(styletable::StyleTable)\n\nGet the next style string from the table.\n\nParameters\n\nstyletable: handle to the style table.\n\nReturns\n\nthe next style string or NULL on error.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.npart","page":"API Reference","title":"ArchGDAL.npart","text":"npart(stylemanager::StyleManager)\nnpart(stylemanager::StyleManager, stylestring::AbstractString)\n\nGet the number of parts in a style.\n\nParameters\n\nstylemanager: handle to the style manager.\nstylestring: (optional) the style string on which to operate. If NULL then the current style string stored in the style manager is used.\n\nReturns\n\nthe number of parts (style tools) in the style.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.resetreading!-Tuple{ArchGDAL.StyleTable}","page":"API Reference","title":"ArchGDAL.resetreading!","text":"resetreading!(styletable::StyleTable)\n\nReset the next style pointer to 0.\n\nParameters\n\nstyletable: handle to the style table.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.savestyletable-Tuple{ArchGDAL.StyleTable, AbstractString}","page":"API Reference","title":"ArchGDAL.savestyletable","text":"savestyletable(styletable::StyleTable, filename::AbstractString)\n\nSave a style table to a file.\n\nParameters\n\nstyletable: handle to the style table.\nfilename: the name of the file to save to.\n\nReturns\n\ntrue on success, false on error\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setparam!","page":"API Reference","title":"ArchGDAL.setparam!","text":"setparam!(styletool::StyleTool, id::Integer, value)\n\nSet Style Tool parameter value.\n\nParameters\n\nstyletool: handle to the style tool.\nid: the parameter id from the enumeration corresponding to the type of this style tool (one of the OGRSTPenParam, OGRSTBrushParam, OGRSTSymbolParam or OGRSTLabelParam enumerations)\nvalue: the new parameter value, can be an Integer, Float64, or AbstactString\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.setunit!-Tuple{ArchGDAL.StyleTool, ArchGDAL.OGRSTUnitId, Real}","page":"API Reference","title":"ArchGDAL.setunit!","text":"setunit!(styletool::StyleTool, newunit::OGRSTUnitId, scale::Real)\n\nSet Style Tool units.\n\nParameters\n\nstyletool: handle to the style tool.\nnewunit: the new unit.\nscale: ground to paper scale factor.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toRGBA-Tuple{ArchGDAL.StyleTool, AbstractString}","page":"API Reference","title":"ArchGDAL.toRGBA","text":"toRGBA(styletool::StyleTool, color::AbstractString)\n\nReturn the r,g,b,a components of a color encoded in #RRGGBB[AA] format.\n\nParameters\n\nstyletool: handle to the style tool.\npszColor: the color to parse\n\nReturns\n\n(R,G,B,A) tuple of Cints.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createstylemanager","page":"API Reference","title":"ArchGDAL.unsafe_createstylemanager","text":"unsafe_createstylemanager(styletable = C_NULL)\n\nOGRStyleMgr factory.\n\nParameters\n\nstyletable: OGRStyleTable or NULL if not working with a style table.\n\nReturns\n\nan handle to the new style manager object.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_createstyletable-Tuple{}","page":"API Reference","title":"ArchGDAL.unsafe_createstyletable","text":"unsafe_createstyletable()\n\nOGRStyleTable factory.\n\nReturns\n\nan handle to the new style table object.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createstyletool-Tuple{ArchGDAL.OGRSTClassId}","page":"API Reference","title":"ArchGDAL.unsafe_createstyletool","text":"unsafe_createstyletool(classid::OGRSTClassId)\n\nOGRStyleTool factory.\n\nParameters\n\nclassid: subclass of style tool to create. One of OGRSTCPen (1), OGRSTCBrush (2), OGRSTCSymbol (3) or OGRSTCLabel (4).\n\nReturns\n\nan handle to the new style tool object or NULL if the creation failed.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_getpart","page":"API Reference","title":"ArchGDAL.unsafe_getpart","text":"unsafe_getpart(stylemanager::StyleManager, id::Integer,\n stylestring = C_NULL)\n\nFetch a part (style tool) from the current style.\n\nParameters\n\nstylemanager: handle to the style manager.\nid: the part number (0-based index).\nstylestring: (optional) the style string on which to operate. If not provided, then the current style string stored in the style manager is used.\n\nReturns\n\nOGRStyleToolH of the requested part (style tools) or NULL on error.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.addfielddefn!-Union{Tuple{T}, Tuple{T, AbstractString, ArchGDAL.OGRFieldType}} where T<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.addfielddefn!","text":"addfielddefn!(layer::AbstractFeatureLayer, name, etype::OGRFieldType;\n )\n\nCreate a new field on a layer.\n\nThis function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.\n\nNot all drivers support this function. You can query a layer to check if it supports it with the OLCCreateField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.\n\nDrivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.\n\nParameters\n\nlayer: the layer to write the field definition.\nname: name of the field definition to write to disk.\netype: type of the field definition to write to disk.\n\nKeyword arguments\n\nnwidth: the preferred formatting width. 0 (default) indicates undefined.\nnprecision: number of decimals for formatting. 0 (default) for undefined.\njustify: the formatting justification ([OJUndefined], OJLeft or OJRight)\napprox: If true (default false), the field may be created in a slightly different form depending on the limitations of the format driver.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.writegeomdefn!-Union{Tuple{T}, Tuple{T, AbstractString, ArchGDAL.OGRwkbGeometryType}} where T<:ArchGDAL.AbstractFeatureLayer","page":"API Reference","title":"ArchGDAL.writegeomdefn!","text":"writegeomdefn!(layer::AbstractFeatureLayer, name, etype::OGRwkbGeometryType,\n approx=false)\n\nWrite a new geometry field on a layer.\n\nThis function should not be called while there are feature objects in existence that were obtained or created with the previous layer definition.\n\nNot all drivers support this function. You can query a layer to check if it supports it with the OLCCreateField capability. Some drivers may only support this method while there are still no features in the layer. When it is supported, the existing features of the backing file/database should be updated accordingly.\n\nDrivers may or may not support not-null constraints. If they support creating fields with not-null constraints, this is generally before creating any feature to the layer.\n\nParameters\n\nlayer: the layer to write the field definition.\nname: name of the field definition to write to disk.\netype: type of the geometry field defintion to write to disk.\n\nKeyword arguments\n\napprox: If true (default false), the geometry field may be created in a slightly different form depending on the limitations of the driver.\n\n\n\n\n\n","category":"method"},{"location":"reference/#API-Tables-Interface","page":"API Reference","title":"Tables Interface","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"tables.jl\"]","category":"page"},{"location":"reference/#API-Raster-Data","page":"API Reference","title":"Raster Data","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"array.jl\", \"colortable.jl\", \"rasterattributetable.jl\", \"rasterband.jl\", \"rasterio.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.RasterDataset","page":"API Reference","title":"ArchGDAL.RasterDataset","text":"RasterDataset(dataset::AbstractDataset)\n\nThis data structure is returned by the ArchGDAL.readraster function and is a wrapper for a GDAL dataset. This wrapper is to signal the user that the dataset should be treated as a 3D AbstractArray where the first two dimensions correspond to longitude and latitude and the third dimension corresponds to different raster bands.\n\nAs it is a wrapper around a GDAL Dataset, it supports the usual raster methods for a GDAL Dataset such as getgeotransform, nraster, getband, getproj, width, and height. As it is also a subtype of AbstractDiskArray{T,3}, it supports the following additional methods: readblock!, writeblock!, eachchunk, haschunks, etc. This satisfies the DiskArray interface, allowing us to be able to index into it like we would an array.\n\nConstructing a RasterDataset will error if the raster bands do not have all the same size and a common element data type.\n\n\n\n\n\n","category":"type"},{"location":"reference/#ArchGDAL._common_size-Tuple{ArchGDAL.AbstractDataset}","page":"API Reference","title":"ArchGDAL._common_size","text":"_common_size(ds::AbstractDataset)\n\nDetermines the size of the raster bands in a dataset and errors if the sizes are not unique.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.readraster-Tuple{String}","page":"API Reference","title":"ArchGDAL.readraster","text":"readraster(s::String; kwargs...)\n\nOpens a GDAL raster dataset. The difference to ArchGDAL.read is that this function returns a RasterDataset, which is a subtype of AbstractDiskArray{T,3}, so that users can operate on the array using direct indexing.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.ColorTable}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroys a color table.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getcolorentryasrgb-Tuple{ArchGDAL.ColorTable, Integer}","page":"API Reference","title":"ArchGDAL.getcolorentryasrgb","text":"getcolorentryasrgb(ct::ColorTable, i::Integer)\n\nFetch a table entry in RGB format.\n\nIn theory this method should support translation of color palettes in non-RGB color spaces into RGB on the fly, but currently it only works on RGB color tables.\n\nParameters\n\ni entry offset from zero to GetColorEntryCount()-1.\n\nReturns\n\ntrue on success, or false if the conversion isn't supported.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.paletteinterp-Tuple{ArchGDAL.ColorTable}","page":"API Reference","title":"ArchGDAL.paletteinterp","text":"paletteinterp(ct::ColorTable)\n\nFetch palette interpretation.\n\nReturns\n\npalette interpretation enumeration value, usually GPI_RGB.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setcolorentry!-Tuple{ArchGDAL.ColorTable, Integer, GDAL.GDALColorEntry}","page":"API Reference","title":"ArchGDAL.setcolorentry!","text":"setcolorentry!(ct::ColorTable, i::Integer, entry::GDAL.GDALColorEntry)\n\nSet entry in color table.\n\nNote that the passed in color entry is copied, and no internal reference to it is maintained. Also, the passed in entry must match the color interpretation of the table to which it is being assigned.\n\nThe table is grown as needed to hold the supplied offset.\n\nParameters\n\ni entry offset from 0 to ncolorentry()-1.\nentry value to assign to table.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_clone-Tuple{ArchGDAL.ColorTable}","page":"API Reference","title":"ArchGDAL.unsafe_clone","text":"unsafe_clone(ct::ColorTable)\n\nMake a copy of a color table.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createcolortable-Tuple{ArchGDAL.GDALPaletteInterp}","page":"API Reference","title":"ArchGDAL.unsafe_createcolortable","text":"unsafe_createcolortable(palette::GDALPaletteInterp)\n\nConstruct a new color table.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asdouble-Tuple{ArchGDAL.RasterAttrTable, Integer, Integer}","page":"API Reference","title":"ArchGDAL.asdouble","text":"asdouble(rat::RasterAttrTable, row::Integer, col::Integer)\n\nFetch field value as a double.\n\nThe value of the requested column in the requested row is returned as a double. Non double fields will be converted to double with the possibility of data loss.\n\nParameters\n\nrow row to fetch (zero based).\ncol column to fetch (zero based).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asint-Tuple{ArchGDAL.RasterAttrTable, Integer, Integer}","page":"API Reference","title":"ArchGDAL.asint","text":"asint(rat::RasterAttrTable, row::Integer, col::Integer)\n\nFetch field value as a integer.\n\nThe value of the requested column in the requested row is returned as an int. Non-integer fields will be converted to int with the possibility of data loss.\n\nParameters\n\nrow row to fetch (zero based).\ncol column to fetch (zero based).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.asstring-Tuple{ArchGDAL.RasterAttrTable, Integer, Integer}","page":"API Reference","title":"ArchGDAL.asstring","text":"asstring(rat::RasterAttrTable, row::Integer, col::Integer)\n\nFetch field value as a string.\n\nThe value of the requested column in the requested row is returned as a string. If the field is numeric, it is formatted as a string using default rules, so some precision may be lost.\n\nParameters\n\nrow row to fetch (zero based).\ncol column to fetch (zero based).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.attributeio!","page":"API Reference","title":"ArchGDAL.attributeio!","text":"attributeio!(rat::RasterAttrTable, access::GDALRWFlag, col, startrow, nrows,\n data::Vector)\n\nRead or Write a block of data to/from the Attribute Table.\n\nParameters\n\naccess Either GF_Read or GF_Write\ncol Column of the Attribute Table\nstartrow Row to start reading/writing (zero based)\nnrows Number of rows to read or write\ndata Vector of Float64, Int32 or AbstractString to read/write. Should be at least nrows long.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.changesarewrittentofile-Tuple{ArchGDAL.RasterAttrTable}","page":"API Reference","title":"ArchGDAL.changesarewrittentofile","text":"changesarewrittentofile(rat::RasterAttrTable)\n\nDetermine whether changes made to this RAT are reflected directly in the dataset\n\nIf this returns false then RasterBand.SetDefaultRAT() should be called. Otherwise this is unnecessary since changes to this object are reflected in the dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.columnname-Tuple{ArchGDAL.RasterAttrTable, Integer}","page":"API Reference","title":"ArchGDAL.columnname","text":"columnname(rat::RasterAttrTable, i::Integer)\n\nFetch name of indicated column.\n\nParameters\n\ni the column index (zero based).\n\nReturns\n\nthe column name or an empty string for invalid column numbers.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.columntype-Tuple{ArchGDAL.RasterAttrTable, Integer}","page":"API Reference","title":"ArchGDAL.columntype","text":"columntype(rat::RasterAttrTable, i::Integer)\n\nFetch column type.\n\nParameters\n\ncol the column index (zero based).\n\nReturns\n\ncolumn type or GFT_Integer if the column index is illegal.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.columnusage-Tuple{ArchGDAL.RasterAttrTable, Integer}","page":"API Reference","title":"ArchGDAL.columnusage","text":"columnusage(rat::RasterAttrTable, i::Integer)\n\nFetch column usage value.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.createcolumn!-Tuple{ArchGDAL.RasterAttrTable, AbstractString, ArchGDAL.GDALRATFieldType, ArchGDAL.GDALRATFieldUsage}","page":"API Reference","title":"ArchGDAL.createcolumn!","text":"createcolumn!(rat::RasterAttrTable, name, fieldtype::GDALRATFieldType,\n fieldusage::GDALRATFieldUsage)\n\nCreate new column.\n\nIf the table already has rows, all row values for the new column will be initialized to the default value (\"\", or zero). The new column is always created as the last column, can will be column (field) \"GetColumnCount()-1\" after CreateColumn() has completed successfully.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.RasterAttrTable}","page":"API Reference","title":"ArchGDAL.destroy","text":"Destroys a RAT.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findcolumnindex-Tuple{ArchGDAL.RasterAttrTable, ArchGDAL.GDALRATFieldUsage}","page":"API Reference","title":"ArchGDAL.findcolumnindex","text":"findcolumnindex(rat::RasterAttrTable, usage::GDALRATFieldUsage)\n\nReturns the index of the first column of the requested usage type, or -1 if no match is found.\n\nParameters\n\nusage usage type to search for.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.findrowindex-Tuple{ArchGDAL.RasterAttrTable, Real}","page":"API Reference","title":"ArchGDAL.findrowindex","text":"findrowindex(rat::RasterAttrTable, pxvalue::Real)\n\nGet row for pixel value.\n\nGiven a raw pixel value, the raster attribute table is scanned to determine which row in the table applies to the pixel value. The row index is returned.\n\nParameters\n\npxvalue the pixel value.\n\nReturns\n\nThe row index or -1 if no row is appropriate.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getlinearbinning-Tuple{ArchGDAL.RasterAttrTable}","page":"API Reference","title":"ArchGDAL.getlinearbinning","text":"getlinearbinning(rat::RasterAttrTable)\n\nGet linear binning information.\n\nReturns\n\nrow0min the lower bound (pixel value) of the first category.\nbinsize the width of each category (in pixel value units).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.initializeRAT!-Tuple{ArchGDAL.RasterAttrTable, ArchGDAL.ColorTable}","page":"API Reference","title":"ArchGDAL.initializeRAT!","text":"initializeRAT!(rat::RasterAttrTable, colortable::ColorTable)\n\nInitialize from color table.\n\nThis method will setup a whole raster attribute table based on the contents of the passed color table. The Value (GFUMinMax), Red (GFURed), Green (GFUGreen), Blue (GFUBlue), and Alpha (GFU_Alpha) fields are created, and a row is set for each entry in the color table.\n\nThe raster attribute table must be empty before calling initializeRAT!().\n\nThe Value fields are set based on the implicit assumption with color tables that entry 0 applies to pixel value 0, 1 to 1, etc.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ncolumn-Tuple{ArchGDAL.RasterAttrTable}","page":"API Reference","title":"ArchGDAL.ncolumn","text":"ncolumn(rat::RasterAttrTable)\n\nFetch table column count.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.nrow-Tuple{ArchGDAL.RasterAttrTable}","page":"API Reference","title":"ArchGDAL.nrow","text":"nrow(rat::RasterAttrTable)\n\nFetch row count.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setlinearbinning!-Tuple{ArchGDAL.RasterAttrTable, Real, Real}","page":"API Reference","title":"ArchGDAL.setlinearbinning!","text":"setlinearbinning!(rat::RasterAttrTable, row0min::Real, binsize::Real)\n\nSet linear binning information.\n\nFor RATs with equal sized categories (in pixel value space) that are evenly spaced, this method may be used to associate the linear binning information with the table.\n\nParameters\n\nrow0min the lower bound (pixel value) of the first category.\nbinsize the width of each category (in pixel value units).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setrowcount!-Tuple{ArchGDAL.RasterAttrTable, Integer}","page":"API Reference","title":"ArchGDAL.setrowcount!","text":"setrowcount!(rat::RasterAttrTable, n::Integer)\n\nSet row count.\n\nResizes the table to include the indicated number of rows. Newly created rows will be initialized to their default values - \"\" for strings, and zero for numeric fields.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setvalue!","page":"API Reference","title":"ArchGDAL.setvalue!","text":"setvalue!(rat::RasterAttrTable, row, col, val)\n\nSet field value from string.\n\nThe indicated field (column) on the indicated row is set from the passed value. The value will be automatically converted for other field types, with a possible loss of precision.\n\nParameters\n\nrow row to fetch (zero based).\ncol column to fetch (zero based).\nval the value to assign, can be an AbstractString, Integer or Float64.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.toColorTable","page":"API Reference","title":"ArchGDAL.toColorTable","text":"toColorTable(rat::RasterAttrTable, n::Integer = -1)\n\nTranslate to a color table.\n\nParameters\n\nn The number of entries to produce (0 to n-1), or -1 to auto-determine the number of entries.\n\nReturns\n\nthe generated color table or NULL on failure.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_clone-Tuple{ArchGDAL.RasterAttrTable}","page":"API Reference","title":"ArchGDAL.unsafe_clone","text":"unsafe_clone(rat::RasterAttrTable)\n\nCopy Raster Attribute Table.\n\nCreates a new copy of an existing raster attribute table. The new copy becomes the responsibility of the caller to destroy. May fail (return NULL) if the attribute table is too large to clone: (nrow() * ncolumn() > RAT_MAX_ELEM_FOR_CLONE)\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createRAT-Tuple{ArchGDAL.ColorTable}","page":"API Reference","title":"ArchGDAL.unsafe_createRAT","text":"unsafe_createRAT(ct::ColorTable)\n\nConstruct table from an existing colortable.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createRAT-Tuple{}","page":"API Reference","title":"ArchGDAL.unsafe_createRAT","text":"unsafe_createRAT()\n\nConstruct empty table.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.accessflag-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.accessflag","text":"accessflag(band::AbstractRasterBand)\n\nReturn the access flag (e.g. OF_READONLY or OF_UPDATE) for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.blocksize-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.blocksize","text":"blocksize(band::AbstractRasterBand)\n\nFetch the \"natural\" block size of this band.\n\nGDAL contains a concept of the natural block size of rasters so that applications can organized data access efficiently for some file formats. The natural block size is the block size that is most efficient for accessing the format. For many formats this is simple a whole scanline in which case *pnXSize is set to GetXSize(), and *pnYSize is set to 1.\n\nHowever, for tiled images this will typically be the tile size.\n\nNote that the X and Y block sizes don't have to divide the image size evenly, meaning that right and bottom edge blocks may be incomplete. See ReadBlock() for an example of code dealing with these issues.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.copywholeraster!-Union{Tuple{T}, Tuple{T, ArchGDAL.AbstractRasterBand}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.copywholeraster!","text":"copywholeraster!( source::AbstractRasterBand, dest::AbstractRasterBand;\n [options, [progressfunc]])\n\nCopy all raster band raster data.\n\nThis function copies the complete raster contents of one band to another similarly configured band. The source and destination bands must have the same width and height. The bands do not have to have the same data type.\n\nIt implements efficient copying, in particular \"chunking\" the copy in substantial blocks.\n\nCurrently the only options value supported is : \"COMPRESSED=YES\" to force alignment on target dataset block sizes to achieve best compression. More options may be supported in the future.\n\nParameters\n\nsource the source band\ndest the destination band\noptions transfer hints in \"StringList\" Name=Value format.\nprogressfunc a function(::Float64, ::String)::Bool to call to report progress\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.createmaskband!-Union{Tuple{T}, Tuple{T, Integer}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.createmaskband!","text":"createmaskband!(band::AbstractRasterBand, nflags::Integer)\n\nAdds a mask band to the current band.\n\nThe default implementation of the CreateMaskBand() method is implemented based on similar rules to the .ovr handling implemented using the GDALDefaultOverviews object. A TIFF file with the extension .msk will be created with the same basename as the original file, and it will have as many bands as the original image (or just one for GMF_PER_DATASET). The mask images will be deflate compressed tiled images with the same block size as the original image if possible.\n\nIf you got a mask band with a previous call to GetMaskBand(), it might be invalidated by CreateMaskBand(). So you have to call GetMaskBand() again.\n\nSee also: http://trac.osgeo.org/gdal/wiki/rfc15_nodatabitmask\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.fillraster!-Union{Tuple{T}, Tuple{T, Real}, Tuple{T, Real, Real}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.fillraster!","text":"fillraster!(band::AbstractRasterBand, realvalue::Real, imagvalue::Real = 0)\n\nFill this band with a constant value.\n\nGDAL makes no guarantees about what values pixels in newly created files are set to, so this method can be used to clear a band to a specified \"default\" value. The fill value is passed in as a double but this will be converted to the underlying type before writing to the file. An optional second argument allows the imaginary component of a complex constant value to be specified.\n\nParameters\n\nrealvalue: Real component of fill value\nimagvalue: Imaginary component of fill value, defaults to zero\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getcategorynames-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getcategorynames","text":"getcategorynames(band::AbstractRasterBand)\n\nFetch the list of category names for this raster.\n\nThe return list is a \"StringList\" in the sense of the CPL functions. That is a NULL terminated array of strings. Raster values without associated names will have an empty string in the returned list. The first entry in the list is for raster values of zero, and so on.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getcolorinterp-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getcolorinterp","text":"getcolorinterp(band::AbstractRasterBand)\n\nColor Interpretation value for band\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getdataset-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getdataset","text":"getdataset(band::AbstractRasterBand)\n\nFetch the handle to its dataset handle, or NULL if this cannot be determined.\n\nNote that some RasterBands are not considered to be a part of a dataset, such as overviews or other \"freestanding\" bands.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getdefaultRAT-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getdefaultRAT","text":"getdefaultRAT(band::AbstractRasterBand)\n\nA RAT will be returned if there is a default one associated with the band, otherwise NULL is returned. The returned RAT is owned by the band and should not be deleted by the application.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getmaskband-Tuple{ArchGDAL.IRasterBand}","page":"API Reference","title":"ArchGDAL.getmaskband","text":"getmaskband(band::IRasterBand)\n\nReturn the mask band associated with the band.\n\nThe RasterBand class includes a default implementation of GetMaskBand() that returns one of four default implementations:\n\nIf a corresponding .msk file exists it will be used for the mask band.\nIf the dataset has a NODATA_VALUES metadata item, an instance of the new\n\nGDALNoDataValuesMaskBand class will be returned. GetMaskFlags() will return GMF_NODATA | GMF_PER_DATASET.\n\nIf the band has a nodata value set, an instance of the new\n\nGDALNodataMaskRasterBand class will be returned. GetMaskFlags() will return GMF_NODATA.\n\nIf there is no nodata value, but the dataset has an alpha band that seems to\n\napply to this band (specific rules yet to be determined) and that is of type GDT_Byte then that alpha band will be returned, and the flags GMF_PER_DATASET and GMF_ALPHA will be returned in the flags.\n\nIf neither of the above apply, an instance of the new\n\nGDALAllValidRasterBand class will be returned that has 255 values for all pixels. The null flags will return GMF_ALL_VALID.\n\nNote that the GetMaskBand() should always return a RasterBand mask, even if it is only an all 255 mask with the flags indicating GMF_ALL_VALID.\n\nSee also: http://trac.osgeo.org/gdal/wiki/rfc15_nodatabitmask\n\nReturns\n\na valid mask band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getnodatavalue-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getnodatavalue","text":"getnodatavalue(band::AbstractRasterBand)\n\nFetch the no data value for this band.\n\nIf there is no out of data value, nothing will be returned instead. The no data value for a band is generally a special marker value used to mark pixels that are not valid data. Such pixels should generally not be displayed, nor contribute to analysis operations.\n\nReturns\n\nthe nodata value for this band or nothing.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getoffset-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getoffset","text":"getoffset(band::AbstractRasterBand)\n\nFetch the raster value offset.\n\nThis (in combination with GetScale()) is used to transform raw pixel values into the units returned by GetUnits(). For e.g. this might be used to store elevations in GUInt16 bands with a precision of 0.1, starting from -100.\n\nUnits value = (raw value * scale) + offset\n\nFor file formats that don't know this intrinsically, a value of 0 is returned.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getoverview-Tuple{ArchGDAL.IRasterBand, Integer}","page":"API Reference","title":"ArchGDAL.getoverview","text":"getoverview(band::IRasterBand, i::Integer)\n\nFetch overview raster band object.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getscale-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getscale","text":"getscale(band::AbstractRasterBand)\n\nFetch the raster value scale.\n\nThis value (in combination with the GetOffset() value) is used to transform raw pixel values into the units returned by GetUnits(). For example this might be used to store elevations in GUInt16 bands with a precision of 0.1, and starting from -100.\n\nUnits value = (raw value * scale) + offset\n\nFor file formats that don't know this intrinsically a value of one is returned.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getunittype-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.getunittype","text":"getunittype(band::AbstractRasterBand)\n\nReturn a name for the units of this raster's values. For instance, it might be \"m\" for an elevation model in meters, or \"ft\" for feet.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.height-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.height","text":"height(band::AbstractRasterBand)\n\nFetch the height in pixels of this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.indexof-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.indexof","text":"indexof(band::AbstractRasterBand)\n\nFetch the band number (1+) within its dataset, or 0 if unknown.\n\nThis method may return a value of 0 to indicate overviews, or free-standing RasterBand objects without a relationship to a dataset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.maskflaginfo-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.maskflaginfo","text":"maskflaginfo(band::AbstractRasterBand)\n\nReturns the flags as in maskflags(@ref) but unpacks the bit values into a named tuple with the following fields:\n\nall_valid\nper_dataset\nalpha\nnodata\n\nReturns\n\nA named tuple with unpacked mask flags\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.maskflags-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.maskflags","text":"maskflags(band::AbstractRasterBand)\n\nReturn the status flags of the mask band associated with the band.\n\nThe GetMaskFlags() method returns an bitwise OR-ed set of status flags with the following available definitions that may be extended in the future:\n\nGMF_ALL_VALID (0x01): There are no invalid pixels, all mask values\n\nwill be 255. When used this will normally be the only flag set.\n\nGMF_PER_DATASET (0x02): The mask band is shared between all bands on\n\nthe dataset.\n\nGMF_ALPHA (0x04): The mask band is actually an alpha band and may\n\nhave values other than 0 and 255.\n\nGMF_NODATA (0x08): Indicates the mask is actually being generated\n\nfrom nodata values. (mutually exclusive of GMF_ALPHA)\n\nThe RasterBand class includes a default implementation of GetMaskBand() that returns one of four default implementations:\n\nIf a corresponding .msk file exists it will be used for the mask band.\nIf the dataset has a NODATA_VALUES metadata item, an instance of the new\n\nGDALNoDataValuesMaskBand class will be returned. GetMaskFlags() will return GMF_NODATA | GMF_PER_DATASET.\n\nIf the band has a nodata value set, an instance of the new\n\nGDALNodataMaskRasterBand class will be returned. GetMaskFlags() will return GMF_NODATA.\n\nIf there is no nodata value, but the dataset has an alpha band that seems to\n\napply to this band (specific rules yet to be determined) and that is of type GDT_Byte then that alpha band will be returned, and the flags GMF_PER_DATASET and GMF_ALPHA will be returned in the flags.\n\nIf neither of the above apply, an instance of the new GDALAllValidRasterBand\n\nclass will be returned that has 255 values for all pixels. The null flags will return GMF_ALL_VALID.\n\nSee also: http://trac.osgeo.org/gdal/wiki/rfc15_nodatabitmask\n\nReturns\n\na valid mask band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.maximum-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.maximum","text":"maximum(band::AbstractRasterBand)\n\nFetch the maximum value for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.minimum-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.minimum","text":"minimum(band::AbstractRasterBand)\n\nFetch the minimum value for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.noverview-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.noverview","text":"noverview(band::AbstractRasterBand)\n\nReturn the number of overview layers available, zero if none.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.pixeltype-Union{Tuple{ArchGDAL.AbstractRasterBand{T}}, Tuple{T}} where T","page":"API Reference","title":"ArchGDAL.pixeltype","text":"pixeltype(band::AbstractRasterBand)\n\nFetch the pixel data type for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.regenerateoverviews!-Union{Tuple{T}, Tuple{T, Vector{<:ArchGDAL.AbstractRasterBand}}, Tuple{T, Vector{<:ArchGDAL.AbstractRasterBand}, AbstractString}, Tuple{T, Vector{<:ArchGDAL.AbstractRasterBand}, AbstractString, Function}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.regenerateoverviews!","text":"regenerateoverviews!(band::AbstractRasterBand,\n overviewbands::Vector{<:AbstractRasterBand}, resampling = \"NEAREST\")\n\nGenerate downsampled overviews.\n\nThis function will generate one or more overview images from a base image using the requested downsampling algorithm. Its primary use is for generating overviews via BuildOverviews(), but it can also be used to generate downsampled images in one file from another outside the overview architecture.\n\nParameters\n\nband the source (base level) band.\noverviewbands the list of downsampled bands to be generated.\n\nKeyword Arguments\n\nresampling (optional) Resampling algorithm (eg. \"AVERAGE\"). default to \"NEAREST\".\nprogressfunc (optional) a function(::Float64, ::String)::Bool to call to report progress\n\nAdditional Remarks\n\nThe output bands need to exist in advance.\n\nThis function will honour properly NODATA_VALUES tuples (special dataset metadata) so that only a given RGB triplet (in case of a RGB image) will be considered as the nodata value and not each value of the triplet independantly per band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.sampleoverview-Tuple{ArchGDAL.IRasterBand, Integer}","page":"API Reference","title":"ArchGDAL.sampleoverview","text":"sampleoverview(band::IRasterBand, nsamples::Integer)\n\nFetch best overview satisfying nsamples number of samples.\n\nReturns the most reduced overview of the given band that still satisfies the desired number of samples nsamples. This function can be used with zero as the number of desired samples to fetch the most reduced overview. The same band as was passed in will be returned if it has not overviews, or if none of the overviews have enough samples.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setcategorynames!-Union{Tuple{T}, Tuple{T, Vector{String}}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setcategorynames!","text":"setcategorynames!(band::AbstractRasterBand, names::Vector{String})\n\nSet the category names for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setcolorinterp!-Union{Tuple{T}, Tuple{T, ArchGDAL.GDALColorInterp}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setcolorinterp!","text":"setcolorinterp!(band::AbstractRasterBand, color::GDALColorInterp)\n\nSet color interpretation of a band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setcolortable!-Union{Tuple{T}, Tuple{T, ArchGDAL.ColorTable}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setcolortable!","text":"setcolortable!(band::AbstractRasterBand, colortable::ColorTable)\n\nSet the raster color table.\n\nThe driver will make a copy of all desired data in the colortable. It remains owned by the caller after the call.\n\nParameters\n\ncolortable color table to apply (where supported).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setdefaultRAT!-Union{Tuple{T}, Tuple{T, ArchGDAL.RasterAttrTable}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setdefaultRAT!","text":"setdefaultRAT!(band::AbstractRasterBand, rat::RasterAttrTable)\n\nSet default Raster Attribute Table.\n\nAssociates a default RAT with the band. If not implemented for the format a CPLE_NotSupported error will be issued. If successful a copy of the RAT is made, the original remains owned by the caller.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setnodatavalue!-Union{Tuple{T}, Tuple{T, Real}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setnodatavalue!","text":"setnodatavalue!(band::AbstractRasterBand, value::Real)\n\nSet the no data value for this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setoffset!-Union{Tuple{T}, Tuple{T, Real}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setoffset!","text":"setoffset!(band::AbstractRasterBand, value::Real)\n\nSet scaling offset.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setscale!-Union{Tuple{T}, Tuple{T, Real}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setscale!","text":"setscale!(band::AbstractRasterBand, ratio::Real)\n\nSet scaling ratio.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setunittype!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.setunittype!","text":"setunittype!(band::AbstractRasterBand, unitstring::AbstractString)\n\nSet unit type of band to unittype.\n\nValues should be one of \"\" (the default indicating it is unknown), \"m\" indicating meters, or \"ft\" indicating feet, though other nonstandard values are allowed.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_getcolortable-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.unsafe_getcolortable","text":"unsafe_getcolortable(band::AbstractRasterBand)\n\nReturns a clone of the color table associated with the band.\n\n(If there is no associated color table, the original result is NULL. The original color table remains owned by the RasterBand, and can't be depended on for long, nor should it ever be modified by the caller.)\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.width-Tuple{ArchGDAL.AbstractRasterBand}","page":"API Reference","title":"ArchGDAL.width","text":"width(band::AbstractRasterBand)\n\nFetch the width in pixels of this band.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.rasterio!","page":"API Reference","title":"ArchGDAL.rasterio!","text":"rasterio!(dataset::AbstractDataset, buffer::AbstractArray{<:Any, 3},\n bands; )\nrasterio!(dataset::AbstractDataset, buffer::AbstractArray{<:Any, 3}, bands, rows,\n cols; )\nrasterio!(rasterband::AbstractRasterBand, buffer::AbstractMatrix{<:Any};\n )\nrasterio!(rasterband::AbstractRasterBand, buffer::AbstractMatrix{<:Any}, rows,\n cols; )\n\nRead/write a region of image data from multiple bands.\n\nThis method allows reading a region of one or more RasterBands from this dataset into a buffer, or writing data from a buffer into a region of the RasterBands. It automatically takes care of data type translation if the element type (<:Any) of the buffer is different than that of the RasterBand. The method also takes care of image decimation / replication if the buffer size (xsz × ysz) is different than the size of the region being accessed (xsize × ysize).\n\nThe pxspace, linespace and bandspace parameters allow reading into or writing from various organization of buffers.\n\nFor highest performance full resolution data access, read and write on \"block boundaries\" as returned by blocksize(), or use the readblock!() and writeblock!() methods.\n\nParameters\n\nrows A continuous range of rows expressed as a UnitRange{<:Integer}, such as 2:9.\ncols A continuous range of columns expressed as a UnitRange{<:Integer}, such as 2:9.\naccess Either GF_Read to read a region of data, or GF_Write to write a region of data.\nxoffset The pixel offset to the top left corner of the region to be accessed. It will be 0 (default) to start from the left.\nyoffset The line offset to the top left corner of the region to be accessed. It will be 0 (default) to start from the top.\nxsize The width of the region of the band to be accessed in pixels.\nysize The height of the region of the band to be accessed in lines.\nbuffer The buffer into which the data should be read, or from which it should be written. It must contain ≥ xsz * ysz * <# of bands> words of type eltype(buffer). It is organized in left to right, top to bottom pixel order. Spacing is controlled by the pxspace, and linespace parameters\nxsz The width of the buffer into which the desired region is to be read, or from which it is to be written.\nysz The height of the buffer into which the desired region is to be read, or from which it is to be written.\nbands The list of bands (1-based) to be read/written.\npxspace The byte offset from the start of a pixel value in the buffer to the start of the next pixel value within a scanline. By default (i.e., 0) the size of eltype(buffer) will be used.\nlinespace The byte offset from the start of one scanline in pBuffer to the start of the next. By default (i.e., 0) the value of sizeof(eltype(buffer)) * xsz will be used.\nbandspace The byte offset from the start of one bands data to the start of the next. By default (0), it will be linespace * ysz implying band sequential organization of the buffer.\n\nReturns\n\nCE_Failure if the access fails, otherwise CE_None.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.readblock!-Union{Tuple{T}, Tuple{ArchGDAL.AbstractRasterBand, Integer, Integer, T}} where T","page":"API Reference","title":"ArchGDAL.readblock!","text":"readblock!(rb::AbstractRasterBand, xoffset::Integer, yoffset::Integer,\n buffer)\n\nRead a block of image data efficiently.\n\nThis method accesses a \"natural\" block from the raster band without resampling, or data type conversion. For a more generalized, but potentially less efficient access use RasterIO().\n\nParameters\n\nxoffset the horizontal block offset, with zero indicating the left most block, 1 the next block and so forth.\nyoffset the vertical block offset, with zero indicating the top most block, 1 the next block and so forth.\nbuffer the buffer into which the data will be read. The buffer must be large enough to hold GetBlockXSize()*GetBlockYSize() words of type GetRasterDataType().\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.writeblock!-Union{Tuple{T}, Tuple{T, Integer, Integer, Any}} where T<:ArchGDAL.AbstractRasterBand","page":"API Reference","title":"ArchGDAL.writeblock!","text":"writeblock!(rb::AbstractRasterBand, xoffset::Integer, yoffset::Integer,\n buffer)\n\nWrite a block of image data efficiently.\n\nThis method accesses a \"natural\" block from the raster band without resampling, or data type conversion. For a more generalized, but potentially less efficient access use RasterIO().\n\nParameters\n\nxoffset the horizontal block offset, with zero indicating the left most block, 1 the next block and so forth.\nyoffset the vertical block offset, with zero indicating the left most block, 1 the next block and so forth.\nbuffer the buffer from which the data will be written. The buffer must be large enough to hold GetBlockXSize()*GetBlockYSize() words of type GetRasterDataType().\n\n\n\n\n\n","category":"method"},{"location":"reference/#API-Spatial-Projections","page":"API Reference","title":"Spatial Projections","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"spatialref.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.clone-Tuple{ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.clone","text":"clone(spref::AbstractSpatialRef)\n\nMakes a clone of the Spatial Reference System. May return NULL.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.crs2transform-Tuple{Function, GeoFormatTypes.GeoFormat, GeoFormatTypes.GeoFormat}","page":"API Reference","title":"ArchGDAL.crs2transform","text":"crs2transform(f::Function, sourcecrs::GeoFormat, targetcrs::GeoFormat;\n kwargs...)\n\nRun the function f on a coord transform generated from the source and target crs definitions. These can be any GeoFormat (from GeoFormatTypes) that holds a coordinate reference system.\n\nkwargs are passed through to importCRS.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.destroy-Tuple{ArchGDAL.CoordTransform}","page":"API Reference","title":"ArchGDAL.destroy","text":"OGRCoordinateTransformation destructor.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getattrvalue-Tuple{ArchGDAL.AbstractSpatialRef, AbstractString, Integer}","page":"API Reference","title":"ArchGDAL.getattrvalue","text":"getattrvalue(spref::AbstractSpatialRef, name::AbstractString, i::Integer)\n\nFetch indicated attribute of named node.\n\nThis method uses GetAttrNode() to find the named node, and then extracts the value of the indicated child. Thus a call to getattrvalue(spref,\"UNIT\",1) would return the second child of the UNIT node, which is normally the length of the linear unit in meters.\n\nParameters name the tree node to look for (case insensitive). i the child of the node to fetch (zero based).\n\nReturns the requested value, or nothing if it fails for any reason.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importCRS!","page":"API Reference","title":"ArchGDAL.importCRS!","text":"importCRS!(spref::AbstractSpatialRef, x::GeoFormatTypes.GeoFormat)\n\nImport a coordinate reference system from a GeoFormat into the spatial ref.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.importCRS-Tuple{GeoFormatTypes.GeoFormat}","page":"API Reference","title":"ArchGDAL.importCRS","text":"importCRS(x::GeoFormatTypes.GeoFormat; [order=:compliant])\n\nImport a coordinate reference system from a GeoFormat into GDAL, returning an ArchGDAL.AbstractSpatialRef.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant (the default) will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importEPSG!-Union{Tuple{T}, Tuple{T, Integer}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importEPSG!","text":"importEPSG!(spref::AbstractSpatialRef, code::Integer)\n\nInitialize SRS based on EPSG GCS or PCS code.\n\nThis method will initialize the spatial reference based on the passed in EPSG GCS or PCS code. It is relatively expensive, and generally involves quite a bit of text file scanning. Reasonable efforts should be made to avoid calling it many times for the same coordinate system.\n\nAdditional Remarks\n\nThis method is similar to importFromEPSGA() except that EPSG preferred axis ordering will not be applied for geographic coordinate systems. EPSG normally defines geographic coordinate systems to use lat/long contrary to typical GIS use). Since OGR 1.10.0, EPSG preferred axis ordering will also not be applied for projected coordinate systems that use northing/easting order.\n\nThe coordinate system definitions are normally read from the EPSG derived support files such as pcs.csv, gcs.csv, pcs.override.csv, gcs.override.csv and falling back to search for a PROJ.4 epsg init file or a definition in epsg.wkt.\n\nThese support files are normally searched for in /usr/local/share/gdal or in the directory identified by the GDAL_DATA configuration option. See CPLFindFile() for details.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importEPSG-Tuple{Integer}","page":"API Reference","title":"ArchGDAL.importEPSG","text":"importEPSG(code::Integer; [order=:compliant])\n\nConstruct a Spatial Reference System from its EPSG GCS or PCS code.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importEPSGA!-Union{Tuple{T}, Tuple{T, Integer}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importEPSGA!","text":"importEPSGA!(spref::AbstractSpatialRef, code::Integer)\n\nInitialize SRS based on EPSG CRS code.\n\nThis method is similar to importFromEPSG() except that EPSG preferred axis ordering will be applied for geographic and projected coordinate systems. EPSG normally defines geographic coordinate systems to use lat/long, and also there are also a few projected coordinate systems that use northing/easting order contrary to typical GIS use). See importFromEPSG() for more details on operation of this method.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importEPSGA-Tuple{Integer}","page":"API Reference","title":"ArchGDAL.importEPSGA","text":"importEPSGA(code::Integer; [order=:compliant])\n\nConstruct a Spatial Reference System from its EPSG CRS code.\n\nThis method is similar to importFromEPSG() except that EPSG preferred axis ordering will be applied for geographic and projected coordinate systems. EPSG normally defines geographic coordinate systems to use lat/long, and also there are also a few projected coordinate systems that use northing/easting order contrary to typical GIS use). See importFromEPSG() for more details on operation of this method.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importESRI!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importESRI!","text":"importESRI!(spref::AbstractSpatialRef, esristr::AbstractString)\n\nImport coordinate system from ESRI .prj format(s).\n\nThis function will read the text loaded from an ESRI .prj file, and translate it into an OGRSpatialReference definition. This should support many (but by no means all) old style (Arc/Info 7.x) .prj files, as well as the newer pseudo-OGC WKT .prj files. Note that new style .prj files are in OGC WKT format, but require some manipulation to correct datum names, and units on some projection parameters. This is addressed within importFromESRI() by an automatic call to morphFromESRI().\n\nCurrently only GEOGRAPHIC, UTM, STATEPLANE, GREATBRITIAN_GRID, ALBERS, EQUIDISTANT_CONIC, TRANSVERSE (mercator), POLAR, MERCATOR and POLYCONIC projections are supported from old style files.\n\nAt this time there is no equivalent exportToESRI() method. Writing old style .prj files is not supported by OGRSpatialReference. However the morphToESRI() and exportToWkt() methods can be used to generate output suitable to write to new style (Arc 8) .prj files.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importESRI-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.importESRI","text":"importESRI(esristr::AbstractString; kwargs...)\n\nCreate SRS from its ESRI .prj format(s).\n\nPassing the keyword argument order=:compliant or order=:trad will set the mapping strategy to return compliant axis order or traditional lon/lat order.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importPROJ4!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importPROJ4!","text":"importPROJ4!(spref::AbstractSpatialRef, projstr::AbstractString)\n\nImport PROJ.4 coordinate string.\n\nThe OGRSpatialReference is initialized from the passed PROJ.4 style coordinate system string. In addition to many +proj formulations which have OGC equivalents, it is also possible to import \"+init=epsg:n\" style definitions. These are passed to importFromEPSG(). Other init strings (such as the state plane zones) are not currently supported.\n\nExample: pszProj4 = \"+proj=utm +zone=11 +datum=WGS84\"\n\nSome parameters, such as grids, recognized by PROJ.4 may not be well understood and translated into the OGRSpatialReference model. It is possible to add the +wktext parameter which is a special keyword that OGR recognized as meaning \"embed the entire PROJ.4 string in the WKT and use it literally when converting back to PROJ.4 format\".\n\nFor example: \"+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +nadgrids=nzgd2kgrid0005.gsb +wktext\"\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importPROJ4-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.importPROJ4","text":"importPROJ4(projstr::AbstractString; [order=:compliant])\n\nCreate SRS from its PROJ.4 string.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importURL!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importURL!","text":"importURL!(spref::AbstractSpatialRef, url::AbstractString)\n\nSet spatial reference from a URL.\n\nThis method will download the spatial reference at a given URL and feed it into SetFromUserInput for you.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importURL-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.importURL","text":"importURL(url::AbstractString; [order=:compliant])\n\nConstruct SRS from a URL.\n\nThis method will download the spatial reference at a given URL and feed it into SetFromUserInput for you.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importUserInput-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.importUserInput","text":"importUserInput(code::AbstractString; [order=:compliant])\n\nConstruct a Spatial Reference System from a user provided code that is parsed by GDAL. This is useful when the input code is in an unknown format or a shortcut not covered by more constrained methods. An example is the code \"EPSG:4326+3855\", the shortest way to describe a combination of a horizontal and vertical crs.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importWKT!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importWKT!","text":"importWKT!(spref::AbstractSpatialRef, wktstr::AbstractString)\n\nImport from WKT string.\n\nThis method will wipe the existing SRS definition, and reassign it based on the contents of the passed WKT string. Only as much of the input string as needed to construct this SRS is consumed from the input string, and the input string pointer is then updated to point to the remaining (unused) input.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importWKT-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.importWKT","text":"importWKT(wktstr::AbstractString; [order=:compliant])\n\nCreate SRS from its WKT string.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importXML!-Union{Tuple{T}, Tuple{T, AbstractString}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.importXML!","text":"importXML!(spref::AbstractSpatialRef, xmlstr::AbstractString)\n\nImport SRS from XML format (GML only currently).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.importXML-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.importXML","text":"importXML(xmlstr::AbstractString; [order=:compliant])\n\nConstruct SRS from XML format (GML only currently).\n\nPassing the keyword argument order=:compliant or order=:trad will set the mapping strategy to return compliant axis order or traditional lon/lat order.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.morphfromESRI!-Tuple{T} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.morphfromESRI!","text":"morphfromESRI!(spref::AbstractSpatialRef)\n\nConvert in place from ESRI WKT format.\n\nThe value notes of this coordinate system are modified in various manners to adhere more closely to the WKT standard. This mostly involves translating a variety of ESRI names for projections, arguments and datums to \"standard\" names, as defined by Adam Gawne-Cain's reference translation of EPSG to WKT for the CT specification.\n\nMissing parameters in TOWGS84, DATUM or GEOGCS nodes can be added to the WKT, comparing existing WKT parameters to GDAL's databases. Note that this optional procedure is very conservative and should not introduce false information into the WKT definition (although caution should be advised when activating it). Needs the Configuration Option GDAL_FIX_ESRI_WKT be set to one of the following (TOWGS84 recommended for proper datum shift calculations)\n\nGDAL_FIX_ESRI_WKT values:\n\nTOWGS84 Adds missing TOWGS84 parameters (necessary for datum transformations), based on named datum and spheroid values.\nDATUM Adds EPSG AUTHORITY nodes and sets SPHEROID name to OGR spec.\nGEOGCS Adds EPSG AUTHORITY nodes and sets GEOGCS, DATUM and SPHEROID names to OGR spec. Effectively replaces GEOGCS node with the result of importFromEPSG(n), using EPSG code n corresponding to the existing GEOGCS. Does not impact PROJCS values.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.morphtoESRI!-Tuple{T} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.morphtoESRI!","text":"morphtoESRI!(spref::AbstractSpatialRef)\n\nConvert in place to ESRI WKT format.\n\nThe value nodes of this coordinate system are modified in various manners more closely map onto the ESRI concept of WKT format. This includes renaming a variety of projections and arguments, and stripping out nodes note recognised by ESRI (like AUTHORITY and AXIS).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.newspatialref","page":"API Reference","title":"ArchGDAL.newspatialref","text":"newspatialref(wkt::AbstractString = \"\"; order=:compliant)\n\nConstruct a Spatial Reference System from its WKT.\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant, will use axis ordering compliant with the relevant CRS authority.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.reproject-Union{Tuple{T}, Tuple{T, GeoFormatTypes.GeoFormat, Nothing}} where T","page":"API Reference","title":"ArchGDAL.reproject","text":"reproject(points, sourceproj::GeoFormat, destproj::GeoFormat;\n [order=:compliant])\n\nReproject points to a different coordinate reference system and/or format.\n\nArguments\n\ncoord: Vector of Geometry points\nsourcecrs: The current coordinate reference system, as a GeoFormat\ntargetcrs: The coordinate reference system to transform to, using any CRS capable GeoFormat\n\nKeyword Arguments\n\norder: Sets the axis mapping strategy. :trad will use traditional lon/lat axis ordering in any actions done with the crs. :compliant (the default) will use axis ordering compliant with the relevant CRS authority.\n\nExample\n\njulia> using ArchGDAL, GeoFormatTypes\n\njulia> ArchGDAL.reproject(\n [[118, 34], [119, 35]],\n ProjString(\"+proj=longlat +datum=WGS84 +no_defs\"),\n EPSG(2025)\n)\n2-element Array{Array{Float64,1},1}:\n [-2.60813482878655e6, 1.5770429674905164e7]\n [-2.663928675953517e6, 1.56208905951487e7]\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.setattrvalue!-Union{Tuple{T}, Tuple{T, AbstractString, AbstractString}} where T<:ArchGDAL.AbstractSpatialRef","page":"API Reference","title":"ArchGDAL.setattrvalue!","text":"setattrvalue!(spref::AbstractSpatialRef, path::AbstractString,\n value::AbstractString)\n\nSet attribute value in spatial reference.\n\nMissing intermediate nodes in the path will be created if not already in existence. If the attribute has no children one will be created and assigned the value otherwise the zeroth child will be assigned the value.\n\nParameters\n\npath: full path to attribute to be set. For instance \"PROJCS|GEOGCS|UNIT\".\nvalue: (optional) to be assigned to node, such as \"meter\". This may be left out if you just want to force creation of the intermediate path.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toEPSG-Tuple{ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.toEPSG","text":"toEPSG(spref::AbstractSpatialRef)\n\nExport EPSG code for this coordinate system if available.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toMICoordSys-Tuple{ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.toMICoordSys","text":"toMICoordSys(spref::AbstractSpatialRef)\n\nExport coordinate system in Mapinfo style CoordSys format.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toPROJ4-Tuple{ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.toPROJ4","text":"toPROJ4(spref::AbstractSpatialRef)\n\nExport coordinate system in PROJ.4 format.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toWKT-Tuple{ArchGDAL.AbstractSpatialRef, Bool}","page":"API Reference","title":"ArchGDAL.toWKT","text":"toWKT(spref::AbstractSpatialRef, simplify::Bool)\n\nConvert this SRS into a nicely formatted WKT string for display to a person.\n\nParameters\n\nspref: the SRS to be converted\nsimplify: true if the AXIS, AUTHORITY and EXTENSION nodes should be stripped off.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toWKT-Tuple{ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.toWKT","text":"toWKT(spref::AbstractSpatialRef)\n\nConvert this SRS into WKT format.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.toXML-Tuple{ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.toXML","text":"toXML(spref::AbstractSpatialRef)\n\nExport coordinate system in XML format.\n\nConverts the loaded coordinate reference system into XML format to the extent possible. LOCALCS coordinate systems are not translatable. An empty string will be returned along with OGRERRNONE.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.transform!-Tuple{Vector{Float64}, Vector{Float64}, Vector{Float64}, ArchGDAL.CoordTransform}","page":"API Reference","title":"ArchGDAL.transform!","text":"transform!(xvertices, yvertices, zvertices, obj::CoordTransform)\n\nTransform points from source to destination space.\n\nParameters\n\nxvertices array of nCount X vertices, modified in place.\nyvertices array of nCount Y vertices, modified in place.\nzvertices array of nCount Z vertices, modified in place.\n\nReturns\n\ntrue on success, or false if some or all points fail to transform.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.unsafe_createcoordtrans-Tuple{ArchGDAL.AbstractSpatialRef, ArchGDAL.AbstractSpatialRef}","page":"API Reference","title":"ArchGDAL.unsafe_createcoordtrans","text":"unsafe_createcoordtrans(source::AbstractSpatialRef,\n target::AbstractSpatialRef)\n\nCreate transformation object.\n\nParameters\n\nsource: source spatial reference system.\ntarget: target spatial reference system.\n\nReturns\n\nNULL on failure or a ready to use transformation object.\n\n\n\n\n\n","category":"method"},{"location":"reference/#API-GeoTransforms","page":"API Reference","title":"Geo Transformations","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"geotransform.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.applygeotransform-Tuple{Vector{Float64}, Float64, Float64}","page":"API Reference","title":"ArchGDAL.applygeotransform","text":"applygeotransform(geotransform::Vector{Float64}, pixel::Float64,\n line::Float64)\n\nApply GeoTransform to x/y coordinate.\n\nApplies the following computation, converting a (pixel,line) coordinate into a georeferenced (geo_x,geo_y) location.\n\n geo_x = geotransform[1] + pixel*geotransform[2] + line*geotransform[3]\n geo_y = geotransform[4] + pixel*geotransform[5] + line*geotransform[6]\n\nParameters\n\ngeotransform Six coefficient GeoTransform to apply.\npixel input pixel position.\nline input line position.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.composegeotransform!-Tuple{Vector{Float64}, Vector{Float64}, Vector{Float64}}","page":"API Reference","title":"ArchGDAL.composegeotransform!","text":"composegeotransform!(gt1::Vector{Float64}, gt2::Vector{Float64},\n gtout::Vector{Float64})\n\nCompose two geotransforms.\n\nThe resulting geotransform is the equivalent to padfGT1 and then padfGT2 being applied to a point.\n\nParameters\n\ngt1 the first geotransform, six values.\ngt2 the second geotransform, six values.\ngtout the output geotransform, six values.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.invgeotransform!-Tuple{Vector{Float64}, Vector{Float64}}","page":"API Reference","title":"ArchGDAL.invgeotransform!","text":"invgeotransform!(gt_in::Vector{Float64}, gt_out::Vector{Float64})\n\nInvert Geotransform.\n\nThis function will invert a standard 3x2 set of GeoTransform coefficients. This converts the equation from being pixel to geo to being geo to pixel.\n\nParameters\n\ngt_in Input geotransform (six doubles - unaltered).\ngt_out Output geotransform (six doubles - updated).\n\nReturns\n\ngt_out\n\n\n\n\n\n","category":"method"},{"location":"reference/#API-Utilities","page":"API Reference","title":"Utilities","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"utilities.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.gdalinfo","page":"API Reference","title":"ArchGDAL.gdalinfo","text":"gdalinfo(dataset::AbstractDataset, options = String[])\n\nList various information about a GDAL supported raster dataset.\n\nParameters\n\ndataset: The source dataset.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdalinfo utility.\n\nReturns\n\nString corresponding to the information about the raster dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdalbuildvrt","page":"API Reference","title":"ArchGDAL.unsafe_gdalbuildvrt","text":"unsafe_gdalbuildvrt(\n datasets::Vector{<:AbstractDataset},\n options = String[];\n dest = \"/vsimem/tmp\")\n\nBuild a VRT from a list of datasets.\n\nParameters\n\ndatasets: The list of input datasets.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdalbuildvrt utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdaldem","page":"API Reference","title":"ArchGDAL.unsafe_gdaldem","text":"unsafe_gdaldem(\n dataset::AbstractDataset,\n processing::String,\n options = String[];\n dest = \"/vsimem/tmp\",\n colorfile)\n\nTools to analyze and visualize DEMs.\n\nParameters\n\ndataset: The source dataset.\npszProcessing: the processing to apply (one of \"hillshade\", \"slope\", \"aspect\", \"color-relief\", \"TRI\", \"TPI\", \"Roughness\").\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdaldem utility.\n\nKeyword Arguments\n\ncolorfile: color file (mandatory for \"color-relief\" processing, should be empty otherwise).\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdalgrid","page":"API Reference","title":"ArchGDAL.unsafe_gdalgrid","text":"unsafe_gdalgrid(\n dataset::AbstractDataset,\n options = String[];\n dest = \"/vsimem/tmp\")\n\nCreate a raster from the scattered data.\n\nParameters\n\ndataset: The source dataset.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdal_grid utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdalnearblack","page":"API Reference","title":"ArchGDAL.unsafe_gdalnearblack","text":"unsafe_gdalnearblack(\n dataset::AbstractDataset,\n options = String[];\n dest = \"/vsimem/tmp\")\n\nConvert nearly black/white borders to exact value.\n\nParameters\n\ndataset: The source dataset.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the nearblack utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdalrasterize","page":"API Reference","title":"ArchGDAL.unsafe_gdalrasterize","text":"unsafe_gdalrasterize(\n dataset::AbstractDataset,\n options = String[];\n dest = \"/vsimem/tmp\")\n\nBurn vector geometries into a raster.\n\nParameters\n\ndataset: The source dataset.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdal_rasterize utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdaltranslate","page":"API Reference","title":"ArchGDAL.unsafe_gdaltranslate","text":"unsafe_gdaltranslate(\n dataset::AbstractDataset,\n options = String[];\n dest = \"/vsimem/tmp\")\n\nConvert raster data between different formats.\n\nParameters\n\ndataset: The dataset to be translated.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdal_translate utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdalvectortranslate","page":"API Reference","title":"ArchGDAL.unsafe_gdalvectortranslate","text":"unsafe_gdalvectortranslate(\n datasets::Vector{<:AbstractDataset},\n options = String[];\n dest = \"/vsimem/tmp\")\n\nConvert vector data between file formats.\n\nParameters\n\ndatasets: The list of input datasets (only 1 supported currently).\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the ogr2ogr utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.unsafe_gdalwarp","page":"API Reference","title":"ArchGDAL.unsafe_gdalwarp","text":"unsafe_gdalwarp(\n datasets::Vector{<:AbstractDataset},\n options = String[];\n dest = \"/vsimem/tmp\")\n\nImage reprojection and warping function.\n\nParameters\n\ndatasets: The list of input datasets.\noptions: List of options (potentially including filename and open options). The accepted options are the ones of the gdalwarp utility.\n\nReturns\n\nThe output dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#API-Format-Drivers","page":"API Reference","title":"Format Drivers","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"driver.jl\"]","category":"page"},{"location":"reference/#ArchGDAL.copyfiles","page":"API Reference","title":"ArchGDAL.copyfiles","text":"copyfiles(drv::Driver, new::AbstractString, old::AbstractString)\ncopyfiles(drvname::AbstractString, new::AbstractString, old::AbstractString)\n\nCopy all the files associated with a dataset.\n\n\n\n\n\n","category":"function"},{"location":"reference/#ArchGDAL.deregister-Tuple{ArchGDAL.Driver}","page":"API Reference","title":"ArchGDAL.deregister","text":"deregister(drv::Driver)\n\nDeregister the passed driver.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.extensiondriver-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.extensiondriver","text":"extensiondriver(filename::AbstractString)\n\nReturns a driver shortname that matches the filename extension.\n\nSo extensiondriver(\"/my/file.tif\") == \"GTiff\".\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.extensions-Tuple{}","page":"API Reference","title":"ArchGDAL.extensions","text":"extensions()\n\nReturns a Dict{String,String} of all of the file extensions that can be read by GDAL, with their respective drivers' shortnames.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getdriver-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.getdriver","text":"getdriver(name::AbstractString)\n\nFetch a driver based on the short name (such as GTiff).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.getdriver-Tuple{Integer}","page":"API Reference","title":"ArchGDAL.getdriver","text":"getdriver(i::Integer)\n\nFetch driver by index.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.identifydriver-Tuple{AbstractString}","page":"API Reference","title":"ArchGDAL.identifydriver","text":"identifydriver(filename::AbstractString)\n\nIdentify the driver that can open a raster file.\n\nThis function will try to identify the driver that can open the passed filename by invoking the Identify method of each registered Driver in turn. The first driver that successful identifies the file name will be returned. If all drivers fail then NULL is returned.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.listdrivers-Tuple{}","page":"API Reference","title":"ArchGDAL.listdrivers","text":"listdrivers()\n\nReturns a listing of all registered drivers.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.longname-Tuple{ArchGDAL.Driver}","page":"API Reference","title":"ArchGDAL.longname","text":"longname(drv::Driver)\n\nReturn the long name of a driver (e.g. GeoTIFF), or empty string.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.ndriver-Tuple{}","page":"API Reference","title":"ArchGDAL.ndriver","text":"ndriver()\n\nFetch the number of registered drivers.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.options-Tuple{ArchGDAL.Driver}","page":"API Reference","title":"ArchGDAL.options","text":"options(drv::Driver)\n\nReturn the list of creation options of the driver [an XML string].\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.register-Tuple{ArchGDAL.Driver}","page":"API Reference","title":"ArchGDAL.register","text":"register(drv::Driver)\n\nRegister a driver for use.\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.shortname-Tuple{ArchGDAL.Driver}","page":"API Reference","title":"ArchGDAL.shortname","text":"shortname(drv::Driver)\n\nReturn the short name of a driver (e.g. GTiff).\n\n\n\n\n\n","category":"method"},{"location":"reference/#ArchGDAL.validate-Union{Tuple{T}, Tuple{ArchGDAL.Driver, Vector{T}}} where T<:AbstractString","page":"API Reference","title":"ArchGDAL.validate","text":"validate(drv::Driver, options::Vector{<:AbstractString})\n\nValidate the list of creation options that are handled by a drv.\n\nThis is a helper method primarily used by create() and copy() to validate that the passed in list of creation options is compatible with the GDAL_DMD_CREATIONOPTIONLIST metadata item defined by some drivers.\n\nParameters\n\ndrv the handle of the driver with whom the lists of creation option must be validated\noptions the list of creation options. An array of strings, whose last element is a NULL pointer\n\nReturns\n\ntrue if the list of creation options is compatible with the create() and createcopy() method of the driver, false otherwise.\n\nAdditional Remarks\n\nSee also: options(drv::Driver)\n\nIf the GDAL_DMD_CREATIONOPTIONLIST metadata item is not defined, this function will return true. Otherwise it will check that the keys and values in the list of creation options are compatible with the capabilities declared by the GDAL_DMD_CREATIONOPTIONLIST metadata item. In case of incompatibility a (non fatal) warning will be emited and false will be returned.\n\n\n\n\n\n","category":"method"},{"location":"reference/#API-GeoInterface","page":"API Reference","title":"GeoInterface","text":"","category":"section"},{"location":"reference/","page":"API Reference","title":"API Reference","text":"Modules = [ArchGDAL]\nPages = [\"geointerface.jl\"]","category":"page"},{"location":"geometries/#Geometric-Operations","page":"Geometric Operations","title":"Geometric Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"using ArchGDAL","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"In this section, we consider some of the common kinds of geometries that arises in applications. These include Point, LineString, Polygon, GeometryCollection, MultiPolygon, MultiPoint, and MultiLineString.","category":"page"},{"location":"geometries/#Geometry-Creation","page":"Geometric Operations","title":"Geometry Creation","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"To create geometries of different types, ","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"point = ArchGDAL.createpoint(1.0, 2.0)\nlinestring = ArchGDAL.createlinestring([(i,i+1) for i in 1.0:3.0])\nlinearring = ArchGDAL.createlinearring([(0.,0.), (0.,1.), (1.,1.)])\nsimplepolygon = ArchGDAL.createpolygon([(0.,0.), (0.,1.), (1.,1.)])\ncomplexpolygon = ArchGDAL.createpolygon([[(0.,0.), (0.,j), (j,j)] for j in 1.0:-0.1:0.9])\nmultipoint = ArchGDAL.createlinearring([(0.,0.), (0.,1.), (1.,1.)])\nmultilinestring = ArchGDAL.createmultilinestring([[(i,i+1) for i in j:j+3] for j in 1.0:5.0:6.0])\nmultipolygon = ArchGDAL.createmultipolygon([[[(0.,0.), (0.,j), (j,j)]] for j in 1.0:-0.1:0.9])","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"Alternatively, they can be assembled from their components.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"point = ArchGDAL.createpoint()\nArchGDAL.addpoint!(point, 1.0, 2.0)\n\nlinestring = ArchGDAL.createlinestring()\nfor i in 1.0:3.0\n ArchGDAL.addpoint!(linestring, i, i+1)\nend\n\nlinearring = ArchGDAL.createlinearring()\nfor i in 1.0:3.0\n ArchGDAL.addpoint!(linearring, i, i+1)\nend\n\npolygon = ArchGDAL.createpolygon()\nfor j in 1.0:-0.1:0.9\n ring = ArchGDAL.createlinearring([(0.,0.), (0.,j), (j,j)])\n ArchGDAL.addgeom!(polygon, ring)\nend\n\nmultipoint = ArchGDAL.createmultipoint()\nfor i in 1.0:3.0\n pt = ArchGDAL.createpoint(i, i+1)\n ArchGDAL.addgeom!(multipoint, pt)\nend\n\nmultilinestring = ArchGDAL.createmultilinestring()\nfor j in 1.0:5.0:6.0\n line = ArchGDAL.createlinestring([(i,i+1) for i in j:j+3])\n ArchGDAL.addgeom!(multilinestring, line)\nend\n\nmultipolygon = ArchGDAL.createmultipolygon()\nfor j in 1.0:-0.1:0.9\n poly = ArchGDAL.createpolygon([(0.,0.), (0.,j), (j,j)])\n ArchGDAL.addgeom!(multipolygon, poly)\nend","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"They can also be constructed from other data formats such as:","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"Well-Known Binary (WKB): ArchGDAL.fromWKB([0x01,0x01,...,0x27,0x41])\nWell-Known Text (WKT): ArchGDAL.fromWKT(\"POINT (1 2)\")\nJavaScript Object Notation (JSON): ArchGDAL.fromJSON(\"\"\"{\"type\":\"Point\",\"coordinates\":[1,2]}\"\"\")","category":"page"},{"location":"geometries/#Geometry-Modification","page":"Geometric Operations","title":"Geometry Modification","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following methods are commonly used for retrieving elements of a geometry.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.getcoorddim(geom): dimension of the coordinates. Returns 0 for an empty point\nArchGDAL.getspatialref(geom)\nArchGDAL.getx(geom, i)\nArchGDAL.gety(geom, i)\nArchGDAL.getz(geom, i)\nArchGDAL.getpoint(geom, i)\nArchGDAL.getgeom(geom, i)","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following methods are commonly used for modifying or adding to a geometry.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.setcoorddim!(geom, dim)\nArchGDAL.setpointcount!(geom, n)\nArchGDAL.setpoint!(geom, i, x, y)\nArchGDAL.setpoint!(geom, i, x, y, z)\nArchGDAL.addpoint!(geom, x, y)\nArchGDAL.addpoint!(geom, x, y, z)\nArchGDAL.addgeom!(geom1, geom2)\nArchGDAL.removegeom!(geom, i)\nArchGDAL.removeallgeoms!(geom)","category":"page"},{"location":"geometries/#Unary-Operations","page":"Geometric Operations","title":"Unary Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following is an non-exhaustive list of unary operations available for geometries.","category":"page"},{"location":"geometries/#Attributes","page":"Geometric Operations","title":"Attributes","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.geomdim(geom): 0 for points, 1 for lines and 2 for surfaces\nArchGDAL.getcoorddim(geom): dimension of the coordinates. Returns 0 for an empty point\nArchGDAL.envelope(geom): the bounding envelope for this geometry\nArchGDAL.envelope3d(geom): the bounding envelope for this geometry\nArchGDAL.wkbsize(geom): size (in bytes) of related binary representation\nArchGDAL.getgeomtype(geom): geometry type code (in OGRwkbGeometryType)\nArchGDAL.geomname(geom): WKT name for geometry type\nArchGDAL.getspatialref(geom): spatial reference system. May be NULL\nArchGDAL.geomlength(geom): the length of the geometry, or 0.0 for unsupported types\nArchGDAL.geomarea(geom): the area of the geometry, or 0.0 for unsupported types","category":"page"},{"location":"geometries/#Predicates","page":"Geometric Operations","title":"Predicates","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following predicates return a Bool.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.isempty(geom)\nArchGDAL.isvalid(geom)\nArchGDAL.issimple(geom)\nArchGDAL.isring(geom)\nArchGDAL.hascurvegeom(geom, nonlinear::Bool)","category":"page"},{"location":"geometries/#Immutable-Operations","page":"Geometric Operations","title":"Immutable Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following methods do not modify geom.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.clone(geom): a copy of the geometry with the original spatial reference system.\nArchGDAL.forceto(geom, targettype): force the provided geometry to the specified geometry type.\nArchGDAL.simplify(geom, tol): Compute a simplified geometry.\nArchGDAL.simplifypreservetopology(geom, tol): Simplify the geometry while preserving topology.\nArchGDAL.delaunaytriangulation(geom, tol, onlyedges): a delaunay triangulation of the vertices of the geometry.\nArchGDAL.boundary(geom): the boundary of the geometry\nArchGDAL.convexhull(geom): the convex hull of the geometry.\nArchGDAL.buffer(geom, dist, quadsegs): a polygon containing the region within the buffer distance of the original geometry.\nArchGDAL.union(geom): the union of the geometry using cascading\nArchGDAL.pointonsurface(geom): Returns a point guaranteed to lie on the surface.\nArchGDAL.centroid(geom): Compute the geometry centroid. It is not necessarily within the geometry.\nArchGDAL.pointalongline(geom, distance): Fetch point at given distance along curve.\nArchGDAL.polygonize(geom): Polygonizes a set of sparse edges.","category":"page"},{"location":"geometries/#Mutable-Operations","page":"Geometric Operations","title":"Mutable Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following methods modifies the first argument geom.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.setcoorddim!(geom, dim): sets the explicit coordinate dimension.\nArchGDAL.flattento2d!(geom): Convert geometry to strictly 2D.\nArchGDAL.closerings!(geom): Force rings to be closed by adding the start point to the end.\nArchGDAL.transform!(geom, coordtransform): Apply coordinate transformation to geometry.\nArchGDAL.segmentize!(geom, maxlength): Modify the geometry such it has no segment longer than the given distance.\nArchGDAL.empty!(geom): Clear geometry information.","category":"page"},{"location":"geometries/#Export-Formats","page":"Geometric Operations","title":"Export Formats","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.toWKB(geom)\nArchGDAL.toISOWKB(geom)\nArchGDAL.toWKT(geom)\nArchGDAL.toISOWKT(geom)\nArchGDAL.toGML(geom)\nArchGDAL.toKML(geom)\nArchGDAL.toJSON(geom)","category":"page"},{"location":"geometries/#Binary-Operations","page":"Geometric Operations","title":"Binary Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following is an non-exhaustive list of binary operations available for geometries.","category":"page"},{"location":"geometries/#Predicates-2","page":"Geometric Operations","title":"Predicates","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following predicates return a Bool.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.intersects(g1, g2)\nArchGDAL.equals(g1, g2)\nArchGDAL.disjoint(g1, g2)\nArchGDAL.touches(g1, g2)\nArchGDAL.crosses(g1, g2)\nArchGDAL.within(g1, g2)\nArchGDAL.contains(g1, g2)\nArchGDAL.overlaps(g1, g2)","category":"page"},{"location":"geometries/#Prepared-geometry","page":"Geometric Operations","title":"Prepared geometry","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"When repeatedly calling ArchGDAL.intersects(g1, g2) and ArchGDAL.contains(g1, g2) on the same geometry, for example, when intersecting 50 points with a 100 polygons, it is possible to increase performance by caching required–otherwise repeatedly calculated–information on geometries. You can do this by preparing a geometry by calling ArchGDAL.preparegeom(geom) and using the resulting prepared geometry as the first argument for ArchGDAL.intersects(g1, g2) or ArchGDAL.contains(g1, g2).","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"If you use a custom GDAL installation, you can check whether it supports prepared geometries by calling ArchGDAL.has_preparedgeom_support().","category":"page"},{"location":"geometries/#Immutable-Operations-2","page":"Geometric Operations","title":"Immutable Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following methods do not mutate the input geomteries g1 and g2.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.intersection(g1, g2)\nArchGDAL.union(g1, g2)\nArchGDAL.difference(g1, g2)\nArchGDAL.symdifference(g1, g2)","category":"page"},{"location":"geometries/#Mutable-Operations-2","page":"Geometric Operations","title":"Mutable Operations","text":"","category":"section"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"The following method modifies the first argument g1.","category":"page"},{"location":"geometries/","page":"Geometric Operations","title":"Geometric Operations","text":"ArchGDAL.addgeom!(g1, g2)","category":"page"},{"location":"quickstart/#ArchGDAL-quickstart","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL quickstart","text":"","category":"section"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"This tutorial is highly inspired by the Python Quickstart, and aims to provide a similar introductory guide to the ArchGDAL package.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"This guide uses a GeoTIFF image of the band 4 of a Landsat 8 image, covering a part of the United State's Colorado Plateau. This image was acquired on July 12, 2016, and can be download at this link. (Image: example.tif)","category":"page"},{"location":"quickstart/#Opening-the-dataset","page":"ArchGDAL Quickstart Guide","title":"Opening the dataset","text":"","category":"section"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Assuming that the ArchGDAL package is already installed, first import the package, and preferably assign an alias to the package.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"using ArchGDAL; const AG = ArchGDAL","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"In this example, we'll be fetching the raster dataset from where it is hosted.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"dataset = AG.readraster(\"/vsicurl/http://landsat-pds.s3.amazonaws.com/c1/L8/037/034/LC08_L1TP_037034_20160712_20170221_01_T1/LC08_L1TP_037034_20160712_20170221_01_T1_B4.TIF\")","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"A dataset can be opened using ArchGDAL's readraster(...) method. This method takes in the path of a dataset as a string, and returns a GDAL Dataset object in read-only mode. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"ArchGDAL can read a variety of file types using appropriate drivers. The driver used for opening the dataset can be queried as such.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"AG.getdriver(dataset)","category":"page"},{"location":"quickstart/#Dataset-Attributes","page":"ArchGDAL Quickstart Guide","title":"Dataset Attributes","text":"","category":"section"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"A raster dataset can have multiple bands of information. To get the number of bands present in a dataset - ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"AG.nraster(dataset)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"In our case, the raster dataset only has a single band. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Other properties of a raster dataset, such as the width and height can be accessed using the following functions","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"AG.width(dataset)\nAG.height(dataset)","category":"page"},{"location":"quickstart/#Dataset-Georeferencing","page":"ArchGDAL Quickstart Guide","title":"Dataset Georeferencing","text":"","category":"section"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"All raster datasets contain embedded georeferencing information, using which the raster image can be located at a geographic location. The georeferencing attributes are stored as the dataset's Geospatial Transform. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"gt = AG.getgeotransform(dataset)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"The x-y coordinates of the top-left corner of the raster dataset are denoted by gt[1] and gt[4] values. In this case, the coordinates . The cell size is represented by gt[2] and gt[6] values, corresponding to the cell size in x and y directions respectively, and the gt[3] and gt[5] values define the rotation. In our case, the top left pixel is at an offset of 358485.0m and 4.265115e6m in x and y directions respectively, from the origin.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"The Origin of the dataset is defined using what is called, a Coordinate Reference System (CRS in short). ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"p = AG.getproj(dataset)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"The getproj(...) function returns the projection of a dataset as a string representing the CRS in the OpenGIS WKT format. To convert it into other CRS representations, such as PROJ.4, toPROJ4(...) can be used. However, first the string representation of the CRS has to be converted into an ArchGDAL.ISpatialRef type using the importWKT(...) function.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"AG.toPROJ4(AG.importWKT(p))","category":"page"},{"location":"quickstart/#Reading-Raster-data","page":"ArchGDAL Quickstart Guide","title":"Reading Raster data","text":"","category":"section"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"In the previous steps, we read the raster file as a dataset. To obtain the actual raster data, we can slice the array accordingly.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"dataset[:, :, 1]","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Since the dimensions of the dataset are [cols, rows, bands], respectively, using [:, :, 1] returns all the columns and rows for the first band. Accordingly other complex slice operations can also be performed. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"To get the individual band","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"band = AG.getband(dataset, 1)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Band specific attributes can be easily accessed through a variety of functions","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"AG.width(band)\nAG.height(band)\nAG.getnodatavalue(band)\nAG.indexof(band)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"The no-data value of the band can be obtained using the getnodatavalue(...) function, which in our case is -1.0e10. ","category":"page"},{"location":"quickstart/#Writing-into-Dataset","page":"ArchGDAL Quickstart Guide","title":"Writing into Dataset","text":"","category":"section"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Creating dummy data to be written as raster dataset.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"x = range(-4.0, 4.0, length=240)\ny = range(-3.0, 3.0, length=180)\nX = repeat(collect(x)', size(y)[1])\nY = repeat(collect(y), 1, size(x)[1])\nZ1 = exp.(-2*log(2) .*((X.-0.5).^2 + (Y.-0.5).^2)./(1^2))\nZ2 = exp.(-3*log(2) .*((X.+0.5).^2 + (Y.+0.5).^2)./(2.5^2))\nZ = 10.0 .* (Z2 .- Z1)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"The fictional field for this example consists of the difference of two Gaussian distributions and is represented by the array Z. Its contours are shown below. (Image: creating-dataset)","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Once we have the data to write into a raster dataset, before performing the write operation itself, it is a good idea to define the geotransform and the coordinate reference system of the resulting dataset. For North-up raster images, only the pixel-size/resolution and the coordinates of the upper-left pixel is required. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"# Resolution\nres = (x[end] - x[1]) /240.0\n\n# Upper-left pixel coordinates\nul_x = x[1] - res/2\nul_y = y[1] - res/2\n\ngt = [ul_x, res, 0.0, ul_y, 0.0, res]","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"The coordinate reference system of the dataset needs to be a string in the WKT format. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"crs = AG.toWKT(AG.importPROJ4(\"+proj=latlong\"))","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"To write this array, first a dataset has to be created. This can be done using the AG.create function. The first argument defines the path of the resulting dataset. The following keyword arguments are hopefully self-explanatory. ","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"Once inside the do...end block, the write! method can be used to write the array(Z), in the 1st band of the opened dataset. Next, the geotransform and CRS can be specified using the setgeotransform! and setproj! methods.","category":"page"},{"location":"quickstart/","page":"ArchGDAL Quickstart Guide","title":"ArchGDAL Quickstart Guide","text":"AG.create(\n \"./temporary.tif\",\n driver = AG.getdriver(\"GTiff\"), \n width=240, \n height=180, \n nbands=1, \n dtype=Float64\n) do dataset\n AG.write!(dataset, Z, 1)\n \n AG.setgeotransform!(dataset, gt)\n AG.setproj!(dataset, crs)\nend","category":"page"},{"location":"memory/#Interactive-versus-Scoped-Objects","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL provides two approaches for working with GDAL objects.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"The first approach is through Scoped Objects, which uses do-blocks as context managers. The problem with using do-blocks to manage context is that they are difficult to work with in an interactive way:","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL.read(filename) do dataset\n # dataset exists within this scope\nend\n# we do not have access to dataset from here on","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"In the example above, we do not get to see information about dataset unless we write code to display information within the scope of the do-block. This makes it difficult to work with it in an exploratory \"depth-first\" manner.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"The second approach is through Interactive Objects, which are designed for use at the REPL.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"dataset = ArchGDAL.read(filename)\n# work with dataset","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"A potential drawback of the second approach is that the objects are managed by Julia's garbage collector. This requires ArchGDAL to keep track of objects that interactive objects have a relationship with so that the interactive objects are not prematurely destroyed. For safety, ArchGDAL might make clones/copies of the underlying data, and only allow a subset of GDAL's objects to be created in this way.","category":"page"},{"location":"memory/#Memory-Management-(Advanced)","page":"Interactive versus Scoped Objects","title":"Memory Management (Advanced)","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"Unlike the design of fiona, ArchGDAL does not immediately make copies from data sources. This introduces concerns about memory management (whether objects should be managed by Julia's garbage collector, or by other means of destroying GDAL object when they are out of scope).","category":"page"},{"location":"memory/#Scoped-Objects","page":"Interactive versus Scoped Objects","title":"Scoped Objects","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"For scoped objects, they are often created within the context of a do-block. As an example, the following code block","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL.getband(dataset, i) do rasterband\n # do something with rasterband\nend","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"corresponds to the following sequence of function calls:","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"rasterband = ArchGDAL.unsafe_getband(dataset, i)\ntry\n # do something with rasterband\nfinally\n ArchGDAL.destroy(rasterband)\nend","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"under the hood (see src/context.jl). Therefore, the objects themselves do not have a finalizer registered:","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"mutable struct RasterBand <: AbstractRasterBand\n ptr::GDAL.GDALRasterBandH\nend\n\nunsafe_getband(dataset::AbstractDataset, i::Integer) =\n RasterBand(GDAL.getrasterband(dataset, i))\n\nfunction destroy(rb::AbstractRasterBand)\n rb.ptr = C_NULL\nend","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"note: Note\nWe use the unsafe_ prefix to indicate those methods that return scoped objects. These methods should not be used by users directly.","category":"page"},{"location":"memory/#Interactive-Objects","page":"Interactive versus Scoped Objects","title":"Interactive Objects","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"By contrast, the following code","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"rasterband = ArchGDAL.getband(dataset, i)\n# do something with rasterband","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"returns an interactive rasterband that has destroy() registered with its finalizer.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"mutable struct IRasterBand <: AbstractRasterBand\n ptr::GDAL.GDALRasterBandH\n ownedby::AbstractDataset\n\n function IRasterBand(\n ptr::GDAL.GDALRasterBandH = C_NULL;\n ownedby::AbstractDataset = Dataset()\n )\n rasterband = new(ptr, ownedby)\n finalizer(destroy, rasterband)\n return rasterband\n end\nend\n\ngetband(dataset::AbstractDataset, i::Integer) =\n IRasterBand(GDAL.getrasterband(dataset, i), ownedby = dataset)\n\nfunction destroy(rasterband::IRasterBand)\n rasterband.ptr = C_NULL\n rasterband.ownedby = Dataset()\n return rasterband\nend","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"The I in IRasterBand indicates that it is an [i]nteractive type. Other interactive types include IDataset, IFeatureLayer, ISpatialRef and IGeometry.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL requires all interactive types to have a finalizer that calls destroy() on them. All objects that have a relationship with an interactive object are required to hold a reference to the interactive object. For example, objects of type IRasterBand might have a relationship with an IDataset, therefore they have an ownedby attribute which might refer to such a dataset.","category":"page"},{"location":"memory/#Views","page":"Interactive versus Scoped Objects","title":"Views","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"Sometimes, it is helpful to work with objects that are \"internal references\" that have restrictions on the types of methods that they support. As an example layerdefn(featurelayer) returns a feature definition that is internal to the feature layer, and does not support methods such as write!(featuredefn, fielddefn) and deletegeomdefn!(featuredefn, i). To indicate that they might have restrictions, some types have View as a postfix. Such types include IFeatureDefnView, IFieldDefnView, and IGeomFieldDefnView.","category":"page"},{"location":"memory/#Summary","page":"Interactive versus Scoped Objects","title":"Summary","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"To summarize,","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL.unsafe_(args...) will return a scoped object. The proper way of using them is within the setting of a do-block:","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL.(args...) do result\n # result is a scoped object\nend","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"ArchGDAL.(args...) will return an interactive object.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"result = ArchGDAL.(args...)\n# result is an interactive object","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"note: Note\nUsers are allowed to mix both \"interactive\" and \"scoped\" objects. As long as they do not manually call ArchGDAL.destroy() on any object, ArchGDAL is designed to avoid the pitfalls of GDAL memory management (e.g. in Python Gotchas).","category":"page"},{"location":"memory/#References","page":"Interactive versus Scoped Objects","title":"References","text":"","category":"section"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"Here's a collection of references for developers who are interested.","category":"page"},{"location":"memory/","page":"Interactive versus Scoped Objects","title":"Interactive versus Scoped Objects","text":"https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/\nhttps://github.com/JuliaLang/julia/issues/7721\nhttps://github.com/JuliaLang/julia/issues/11207\nhttps://gdal.org/api/python_gotchas.html\nhttps://lists.osgeo.org/pipermail/gdal-dev/2010-September/026027.html\nhttps://sgillies.net/2013/12/17/teaching-python-gis-users-to-be-more-rational.html\nhttps://pcjericks.github.io/py-gdalogr-cookbook/gotchas.html#features-and-geometries-have-a-relationship-you-don-t-want-to-break","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"#=\nThis piece of documentation is currently commented out until the GDAL build provided by GDAL.jl provides spatialite support.\nCurrently it already includes sqlite support, so everything up to X(Geometry) works, but then it doesn't recognize that function.\nThe reason this is commented out is because Documenter.jl would still run the examples here and give warnings that they didn't work.\n\n# Working with Spatialite\n\nHere is an example of how you can work with a SQLite Database in ArchGDAL.jl, and follows the tutorial in [http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html](http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html).\n\nWe will work with the following database:\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite import ArchGDAL","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"filepath = download(\"https://github.com/yeesian/ArchGDALDatasets/raw/e0b15dca5ad493c5ebe8111688c5d14b031b7305/spatialite/test-2.3.sqlite\", \"test.sqlite\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\nHere's a quick summary of `test.sqlite`:\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite ArchGDAL.read(filepath) do dataset print(dataset) end","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\nWe will display the results of running `query` on the dataset using the following function:\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite function inspect(query, filename=filepath) ArchGDAL.read(filename) do dataset ArchGDAL.executesql(dataset, query) do results print(results) end end end","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n## Constructing SQL Queries\n\n### A Simple LIMIT Query\nHere's a first query:","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"SELECT * FROM towns LIMIT 5\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\nA few points to understand:\n* the `SELECT` statement requests SQLite to perform a query\n* fetching all columns `[*]`\n* `FROM` the database table of name `towns`\n* retrieving only the first five rows [`LIMIT 5`]\n\n### A Simple ORDER BY Query\nNow try this second SQL query:\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"select name AS Town, peoples as Population from towns ORDER BY name LIMIT 5\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\nSome remarks:\n* in SQL, constructs using lower- or upper-case have identical effects; So the commands constructed using `SELECT` and `select`, or `FROM` and `from` are equivalent.\n* you can freely choose which columns to fetch, determine their ordering, and rename then if you wish by using the `AS` clause.\n* you can order the fetched rows by using the `ORDER BY` clause.\n\n### The WHERE and ORDER BY clauses\nA more complex SQL query:","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\"select name, peoples from towns WHERE peoples > 350000 order by peoples DESC\"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\nSome remarks:\n* you can filter a specific set of rows by imposing a `WHERE` clause; only those rows that satisfies the logical expression you specify will be fetched.\n* In this example only `towns` with a population greater than `350000` peoples has been fetched.\n* you can order rows in *descending* order if appropriate, by using the `DESC` clause.\n\n### Using SQL functions","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" select COUNT() as '# Towns', MIN(peoples) as Smaller, MAX(peoples) as Bigger, SUM(peoples) as 'Total peoples', SUM(peoples) / COUNT() as 'mean peoples for town' from towns \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n* you can split complex queries along many lines\n* you can use *functions* in an SQL query. `COUNT()`, `MIN()`, `MAX()` and `SUM()` are functions. Not at all surprisingly:\n * `COUNT()` returns the total number of rows.\n * `MIN()` returns the minimum value for the given column.\n * `MAX()` returns the maximum value for the given column.\n * `SUM()` returns the total of all values for the given column.\n* you can do *calculations* in your query. e.g. we have calculated the `mean` of peoples per village dividing the `SUM()` by the `COUNT()` values.\n\n### Constructing Expressions\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"select (10 - 11) * 2 as Number, ABS((10 - 11) * 2) as AbsoluteValue\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n* the `(10 - 11) * 2` term is an example of an `expression`.\n* the `ABS()` function returns the *absolute value* of a number.\n* note that in this example we have not used any DB column or DB table at all.\n\n### The HEX() function","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" select name, peoples, HEX(Geometry) from Towns where peoples > 350000 order by peoples DESC \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n* the `HEX()` function returns the hexadecimal representation of a `BLOB` column value.\n* in the preceding execution of this query, the geom column seemed empty; now, by using the `HEX()` function, we discover that it contains lots of strange binary data.\n* *geom* contains `GEOMETRY` values, stored as `BLOB`s and encoded in the internal representation used by SpatiaLite.\n\n!!! note\n \n SQLite in its own hasn't the slightest idea of what `GEOMETRY` is, and cannot do any other operation on it. To really use `GEOMETRY` values, it's time use the SpatiaLite extension.\n\n## Spatialite Features\n\n### Well-Known Text","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT name, peoples, AsText(Geometry) from Towns where peoples > 350000 order by peoples DESC \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* the `AsText()` function comes from SpatiaLite, and returns the *Well Known Text - WKT* representation for a `GEOMETRY` column value. WKT is a standard notation conformant to OpenGIS specification.\n* in the preceding execution of this query, the `HEX()` function returned lots of strange binary data. Now the `AsText()` function shows useful and quite easily understandable `GEOMETRY` values.\n* a `POINT` is the simplest `GEOMETRY` class, and has only a couple of `[X,Y]` coordinates.\n\n### Working with Coordinates","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT name, X(Geometry), Y(Geometry) FROM Towns WHERE peoples > 350000 ORDER BY peoples DESC \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* the SpatiaLite `X()` function returns the *X coordinate* for a `POINT`.\n* the `Y()` function returns the *Y coordinate* for a `POINT`.\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"SELECT HEX(GeomFromText('POINT(10 20)'))\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n### Format Conversions\nyou can use the following `GEOMETRY` format conversion functions:","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"SELECT HEX(AsBinary(GeomFromText('POINT(10 20)')))\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"SELECT AsText(GeomFromWKB(X'010100000000000000000024400000000000003440'))\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* the SpatiaLite `GeomFromText()` function returns the internal `BLOB` representation for a `GEOMETRY`.\n* the `AsBinary()` function returns the *Well Known Binary - WKB* representation for a `GEOMETRY` column value. WKB is a standard notation conformant to OpenGIS specification.\n* the `GeomFromWKB()` function converts a WKB value into the corresponding internal `BLOB` value.\n\n## GEOMETRY Classes\n\n### LINESTRING","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"SELECT PKUID, AsText(Geometry) FROM HighWays WHERE PKUID = 10\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* `LINESTRING` is another `GEOMETRY` class, and has lots of `POINT`s.\n* in this case you have fetched a very simple `LINESTRING`, representing a polyline with just 4 vertices.\n* it isn't unusual to encounter `LINESTRING`s with thousands of vertices in real GIS data.\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT PK_UID, NumPoints(Geometry), GLength(Geometry), Dimension(Geometry), GeometryType(Geometry) FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5 \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* the SpatiaLite `NumPoints()` function returns the *number of vertices* for a `LINESTRING GEOMETRY`.\n* the `GLength()` function returns the *geometric length* [expressed in *map units*] for a `LINESTRING GEOMETRY`.\n* the `Dimension()` function returns the *dimensions'* number for any `GEOMETRY` class [e.g. 1 for lines].\n* the `GeometryType()` function returns the *class type* for any kind of `GEOMETRY` value.\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT PK_UID, NumPoints(Geometry), AsText(StartPoint(Geometry)), AsText(EndPoint(Geometry)), X(PointN(Geometry, 2)), Y(PointN(Geometry, 2)) FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5 \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n* the SpatiaLite `StartPoint()` function returns the first `POINT` for a `LINESTRING GEOMETRY`.\n* the `EndPoint()` function returns the last `POINT` for a `LINESTRING GEOMETRY`.\n* the `PointN()` function returns the selected vertex as a `POINT`; each one vertex is identified by a relative index. The first vertex is identified by an index value `1`, the second by an index value `2` and so on.\n* You can freely nest the various SpatiaLite functions, by passing the return value of the inner function as an argument for the outer one.\n\n### POLYGON","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"SELECT name, AsText(Geometry) FROM Regions WHERE PK_UID = 52\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* `POLYGON` is another `GEOMETRY` class.\n* in this case you have fetched a very simple `POLYGON`, having only the *exterior ring* [i.e. it doesn't contains any internal hole]. Remember that POLYGONs may optionally contain an arbitrary number of *internal holes*, each one delimited by an *interior ring*.\n* the *exterior ring* in itself is simply a `LINESTRING` [and *interior rings* too are `LINESTRINGS`].\n* note that a POLYGON is a *closed geometry*, and thus the first and the last POINT for each *ring* are exactly identical.\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT PK_UID, Area(Geometry), AsText(Centroid(Geometry)), Dimension(Geometry), GeometryType(Geometry) FROM Regions ORDER BY Area(Geometry) DESC LIMIT 5 \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* we have already meet the SpatiaLite `Dimension()` and `GeometryType()` functions; they works for `POLYGON`s exactly in same fashion as for any other kind of `GEOMETRY`.\n* the SpatiaLite `Area()` function returns the geometric area [expressed in *square map units*] for a `POLYGON GEOMETRY`.\n* the `Centroid()` function returns the `POINT` identifying the *centroid* for a `POLYGON GEOMETRY`.\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT PK_UID, NumInteriorRings(Geometry), NumPoints(ExteriorRing(Geometry)), NumPoints(InteriorRingN(Geometry, 1)) FROM regions ORDER BY NumInteriorRings(Geometry) DESC LIMIT 5 \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"\n* the SpatiaLite `ExteriorRing()` functions returns the exterior ring for a given `GEOMETRY`. Any valid `POLYGON` must have an *exterior ring*. Remember: each one of the rings belonging to a `POLYGON` is a closed `LINESTRING`.\n* the SpatiaLite `NumInteriorRings()` function returns the number of interior rings belonging to a `POLYGON`. A valid `POLYGON` may have any number of interior rings, including *zero* i.e. no interior ring at all.\n* The SpatiaLite `InteriorRingN()` function returns the selected interior rings as a `LINESTRING`; each one interior ring is identified by a relative index. The first interior ring is identified by an index value `1`, the second by an index value `2` and so on.\n* Any ring is a `LINESTRING`, so we can use the `NumPoints()` function in order to detect the number of related vertices. If we call the `NumPoints()` function on a `NULL GEOMETRY` [or on a `GEOMETRY` of non-`LINESTRING` class] we'll get a `NULL` result. This explains why the the last three rows has a `NULL` `NumPoints()` result; there is no corresponding interior ring!\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT AsText(InteriorRingN(Geometry, 1)), AsText(PointN(InteriorRingN(Geometry, 1), 4)), X(PointN(InteriorRingN(Geometry, 1), 5)), Y(PointN(InteriorRingN(Geometry, 1), 5)) FROM Regions WHERE PK_UID = 55 \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* we have already met in the preceding ones the usage of nested functions. For `POLYGON`s it becomes to be a little more tedious, but still easily understandable.\n* e.g. to obtain the last column we have used `InteriorRingN()` in order to get the first interior ring, and then `PointN()` to get the *fifth* vertex. At last we can call `Y()` to get the coordinate value.\n","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"@example spatialite inspect(\"\"\" SELECT Name, AsText(Envelope(Geometry)) FROM Regions LIMIT 5 \"\"\")","category":"page"},{"location":"spatialite/","page":"-","title":"-","text":"* the SpatiaLite `Envelope()` function always returns a `POLYGON` that is the *Minimum Bounding Rectangle - MBR* for the given `GEOMETRY`. Because an MBR is a rectangle, it always has `5 POINT`s [remember: in closed geometries the last POINT must be identical to the first one].\n* individual `POINT`s are as follows:\n * POINT #1: `minX,minY`\n * POINT #2: `maxX,minY`\n * POINT #3: `maxX,maxY`\n * POINT #4: `minX,maxY`\n * POINT #5: `minX,minY`\n* MBRs are of peculiar interest, because by using them you can evaluate spatial relationships between two geometries in a simplified and roughly approximative way. But MBR comparisons are very fast to compute, so they are very useful and widely used to speed up data processing.\n* MBRs are also widely referenced as *bounding boxes*, or \"BBOX\" as well.\n\n### Complex Geometry Classes\n`POINT`, `LINESTRING` and `POLYGON` are the elementary classes for `GEOMETRY`. But `GEOMETRY` supports the following complex classes as well:\n* a `MULTIPOINT` is a collection of two or more `POINT`s belonging to the same entity.\n* a `MULTILINESTRING` is a collection of two or more `LINESTRING`s.\n* a `MULTIPOLYGON` is a collection of two or more `POLYGON`s.\n* a `GEOMETRYCOLLECTION` is an arbitrary collection containing any other kind of geometries.\n\nWe'll not explain in detail this kind of collections, because it will be simply too boring and dispersive. Generally speaking, they extend in the expected way to their corresponding elementary classes, e.g.\n* the SpatiaLite `NumGeometries()` function returns the number of elements for a collection.\n* the `GeometryN()` function returns the *N-th* element for a collection.\n* the `GLength()` function applied to a `MULTILINESTRING` returns the sum of individual lengths for each `LINESTRING` composing the collection.\n* the `Area()` function applied to a `MULTIPOLYGON` returns the sum of individual areas for each `POLYGON` in the collection.\n* the `Centroid()` function returns the *average centroid* when applied to a `MULTIPOLYGON`.\n=#","category":"page"},{"location":"#ArchGDAL.jl-documentation","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"","category":"section"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"GDAL is a translator library for raster and vector geospatial data formats that is released under an X/MIT license by the Open Source Geospatial Foundation. As a library, it presents an abstract data model to drivers for various raster and vector formats.","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"ArchGDAL.jl aims to be a complete solution for working with GDAL in Julia, similar in scope to the SWIG bindings for Python. It builds on top of GDAL.jl, and provides a high level API for GDAL, espousing the following principles.","category":"page"},{"location":"#Principles-(The-Arch-Way)","page":"ArchGDAL.jl documentation","title":"Principles (The Arch Way)","text":"","category":"section"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"(adapted from https://wiki.archlinux.org/index.php/Arch_Linux#Principles)","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"simplicity: without unnecessary additions or modifications. It preserves the GDAL Data Model and requires minimal dependencies.\nmodernity: ArchGDAL strives to maintain the latest stable release versions of GDAL as long as systemic package breakage can be reasonably avoided.\npragmatism: The principles here are only useful guidelines. Ultimately, design decisions are made on a case-by-case basis through developer consensus. Evidence-based technical analysis and debate are what matter, not politics or popular opinion.\nuser-centrality: Whereas other libraries attempt to be more user-friendly, ArchGDAL shall be user-centric. It is intended to fill the needs of those contributing to it, rather than trying to appeal to as many users as possible.\nversatility: ArchGDAL will strive to remain small in its assumptions about the range of user-needs, and to make it easy for users to build their own extensions/conveniences.","category":"page"},{"location":"#Installation","page":"ArchGDAL.jl documentation","title":"Installation","text":"","category":"section"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"To install this package, run the following command in the Pkg REPL-mode,","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"pkg> add ArchGDAL","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"To test if it is installed correctly,","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"pkg> test ArchGDAL","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"To load the package,","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"julia> using ArchGDAL","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"In the documentation AG is often used as a shorthand for ArchGDAL. To use this shorthand you can use:","category":"page"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"import ArchGDAL as AG","category":"page"},{"location":"#Contents","page":"ArchGDAL.jl documentation","title":"Contents","text":"","category":"section"},{"location":"","page":"ArchGDAL.jl documentation","title":"ArchGDAL.jl documentation","text":"","category":"page"},{"location":"projections/#Spatial-Projections","page":"Spatial Projections","title":"Spatial Projections","text":"","category":"section"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"using ArchGDAL; const AG = ArchGDAL\nusing Plots","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"(This is based entirely on the GDAL/OSR Tutorial and Python GDAL/OGR Cookbook.)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"The ArchGDAL.SpatialRef, and ArchGDAL.CoordTransform types are lightweight wrappers around GDAL objects that represent coordinate systems (projections and datums) and provide services to transform between them. These services are loosely modeled on the OpenGIS Coordinate Transformations specification, and use the same Well Known Text format for describing coordinate systems.","category":"page"},{"location":"projections/#Coordinate-Systems","page":"Spatial Projections","title":"Coordinate Systems","text":"","category":"section"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"There are two primary kinds of coordinate systems. The first is geographic (positions are measured in long/lat) and the second is projected (such as UTM - positions are measured in meters or feet).","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"Geographic Coordinate Systems: A Geographic coordinate system contains information on the datum (which implies an spheroid described by a semi-major axis, and inverse flattening), prime meridian (normally Greenwich), and an angular units type which is normally degrees.\nProjected Coordinate Systems: A projected coordinate system (such as UTM, Lambert Conformal Conic, etc) requires and underlying geographic coordinate system as well as a definition for the projection transform used to translate between linear positions (in meters or feet) and angular long/lat positions.","category":"page"},{"location":"projections/#Creating-Spatial-References","page":"Spatial Projections","title":"Creating Spatial References","text":"","category":"section"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"spatialref = ArchGDAL.importEPSG(2927)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"ArchGDAL.toPROJ4(spatialref)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"The details of how to interpret the results can be found in http://proj4.org/usage/projections.html.","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"In the above example, we constructed a SpatialRef object from the EPSG Code 2927. There are a variety of other formats from which SpatialRefs can be constructed, such as","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"ArchGDAL.importEPSG(::Int): based on the EPSG code\nArchGDAL.importEPSGA(::Int): based on the EPSGA code\nArchGDAL.importESRI(::String): based on ESRI projection codes\nArchGDAL.importPROJ4(::String): based on the PROJ.4 string (reference)\nArchGDAL.importURL(::String): download from a given URL and feed it into SetFromUserInput for you.\nArchGDAL.importWKT(::String): WKT string\nArchGDAL.importXML(::String): XML format (GML only currently)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"We currently support a few export formats too:","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"ArchGDAL.toMICoordSys(spref): Mapinfo style CoordSys format.\nArchGDAL.toPROJ4(spref): coordinate system in PROJ.4 format.\nArchGDAL.toWKT(spref): nicely formatted WKT string for display to a person.\nArchGDAL.toXML(spref): converts into XML format to the extent possible.","category":"page"},{"location":"projections/#Reprojecting-a-Geometry","page":"Spatial Projections","title":"Reprojecting a Geometry","text":"","category":"section"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"source = ArchGDAL.importEPSG(2927)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"target = ArchGDAL.importEPSG(4326)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"ArchGDAL.createcoordtrans(source, target) do transform\n point = ArchGDAL.fromWKT(\"POINT (1120351.57 741921.42)\")\n println(\"Before: $(ArchGDAL.toWKT(point))\")\n ArchGDAL.transform!(point, transform)\n println(\"After: $(ArchGDAL.toWKT(point))\")\nend","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"using DataFrames\nimport GeoFormatTypes as GFT\n\ncoords = zip(rand(10), rand(10))\ndf = DataFrame(geom=ArchGDAL.createpoint.(coords), name=\"test\");\ndf.geom = ArchGDAL.reproject(df.geom, GFT.EPSG(4326), GFT.EPSG(28992))","category":"page"},{"location":"projections/#Reprojecting-from-a-layer","page":"Spatial Projections","title":"Reprojecting from a layer","text":"","category":"section"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"# Getting vector data\nds = AG.read(\"/vsicurl/https://raw.githubusercontent.com/yeesian/ArchGDALDatasets/master/data/metropole.geojson\")\nlayer = AG.getlayer(ds, 0)","category":"page"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"# Plotting with native GEOJSON geographic CRS\np_WGS_84 = AG.getfeature(layer, 0) do feature\n AG.getgeom(feature, 0) do geom\n plot(geom; fa=0.1, title=\"WGS 84\")\n end\nend\n\n# Plotting with local projected CRS\np_Lambert_93 = AG.getfeature(layer, 0) do feature\n AG.getgeom(feature, 0) do geom\n source = AG.getspatialref(geom)\n target = AG.importEPSG(2154)\n AG.createcoordtrans(source, target) do transform\n plot(AG.transform!(geom, transform); fa=0.1, title=\"Lambert 93\")\n end\n end\nend\n\nplot(p_WGS_84, p_Lambert_93; size=(600, 200), layout=(1,2))","category":"page"},{"location":"projections/#References","page":"Spatial Projections","title":"References","text":"","category":"section"},{"location":"projections/","page":"Spatial Projections","title":"Spatial Projections","text":"Some background on OpenGIS coordinate systems and services can be found in the Simple Features for COM, and Spatial Reference Systems Abstract Model documents available from the Open Geospatial Consortium. The GeoTIFF Projections Transform List may also be of assistance in understanding formulations of projections in WKT. The EPSG Geodesy web page is also a useful resource. You may also consult the OGC WKT Coordinate System Issues page.","category":"page"},{"location":"tables/#Tabular-Interface","page":"Tables Interface","title":"Tabular Interface","text":"","category":"section"},{"location":"tables/","page":"Tables Interface","title":"Tables Interface","text":"using ArchGDAL, DataFrames","category":"page"},{"location":"tables/","page":"Tables Interface","title":"Tables Interface","text":"ArchGDAL now brings in greater flexibilty in terms of vector data handling via the Tables.jl API. In general, tables are modelled based on feature layers and support multiple geometries per layer. Namely, the layer(s) of a dataset can be converted to DataFrame(s) to perform miscellaneous spatial operations.","category":"page"},{"location":"tables/","page":"Tables Interface","title":"Tables Interface","text":"Here is a quick example based on the data/point.geojson dataset:","category":"page"},{"location":"tables/","page":"Tables Interface","title":"Tables Interface","text":"dataset = ArchGDAL.read(\"data/point.geojson\")\n\nDataFrames.DataFrame(ArchGDAL.getlayer(dataset, 0))","category":"page"},{"location":"tables/","page":"Tables Interface","title":"Tables Interface","text":"To illustrate multiple geometries, here is a second example based on the data/multi_geom.csv dataset:","category":"page"},{"location":"tables/","page":"Tables Interface","title":"Tables Interface","text":"dataset1 = ArchGDAL.read(\"data/multi_geom.csv\", options = [\"GEOM_POSSIBLE_NAMES=point,linestring\", \"KEEP_GEOM_COLUMNS=NO\"])\n\nDataFrames.DataFrame(ArchGDAL.getlayer(dataset1, 0))","category":"page"}] +} diff --git a/previews/PR441/siteinfo.js b/previews/PR441/siteinfo.js new file mode 100644 index 00000000..63f7dc41 --- /dev/null +++ b/previews/PR441/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR441"; diff --git a/previews/PR441/spatialite/index.html b/previews/PR441/spatialite/index.html new file mode 100644 index 00000000..01d74ab2 --- /dev/null +++ b/previews/PR441/spatialite/index.html @@ -0,0 +1,132 @@ + +- · ArchGDAL.jl
    #=
    +This piece of documentation is currently commented out until the GDAL build provided by GDAL.jl provides spatialite support.
    +Currently it already includes sqlite support, so everything up to X(Geometry) works, but then it doesn't recognize that function.
    +The reason this is commented out is because Documenter.jl would still run the examples here and give warnings that they didn't work.
    +
    +# Working with Spatialite
    +
    +Here is an example of how you can work with a SQLite Database in ArchGDAL.jl, and follows the tutorial in [http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html](http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html).
    +
    +We will work with the following database:
    +

    @example spatialite import ArchGDAL

    filepath = download("https://github.com/yeesian/ArchGDALDatasets/raw/e0b15dca5ad493c5ebe8111688c5d14b031b7305/spatialite/test-2.3.sqlite", "test.sqlite")

    
    +Here's a quick summary of `test.sqlite`:
    +

    @example spatialite ArchGDAL.read(filepath) do dataset print(dataset) end

    
    +We will display the results of running `query` on the dataset using the following function:
    +

    @example spatialite function inspect(query, filename=filepath) ArchGDAL.read(filename) do dataset ArchGDAL.executesql(dataset, query) do results print(results) end end end

    
    +## Constructing SQL Queries
    +
    +### A Simple LIMIT Query
    +Here's a first query:

    @example spatialite inspect("SELECT * FROM towns LIMIT 5")

    
    +A few points to understand:
    +* the `SELECT` statement requests SQLite to perform a query
    +* fetching all columns `[*]`
    +* `FROM` the database table of name `towns`
    +* retrieving only the first five rows [`LIMIT 5`]
    +
    +### A Simple ORDER BY Query
    +Now try this second SQL query:
    +

    @example spatialite inspect("select name AS Town, peoples as Population from towns ORDER BY name LIMIT 5")

    
    +Some remarks:
    +* in SQL, constructs using lower- or upper-case have identical effects; So the commands constructed using `SELECT` and `select`, or `FROM` and `from` are equivalent.
    +* you can freely choose which columns to fetch, determine their ordering, and rename then if you wish by using the `AS` clause.
    +* you can order the fetched rows by using the `ORDER BY` clause.
    +
    +### The WHERE and ORDER BY clauses
    +A more complex SQL query:

    @example spatialite inspect("""select name, peoples from towns WHERE peoples > 350000 order by peoples DESC""")

    
    +Some remarks:
    +* you can filter a specific set of rows by imposing a `WHERE` clause; only those rows that satisfies the logical expression you specify will be fetched.
    +* In this example only `towns` with a population greater than `350000` peoples has been fetched.
    +* you can order rows in *descending* order if appropriate, by using the `DESC` clause.
    +
    +### Using SQL functions

    @example spatialite inspect(""" select COUNT() as '# Towns', MIN(peoples) as Smaller, MAX(peoples) as Bigger, SUM(peoples) as 'Total peoples', SUM(peoples) / COUNT() as 'mean peoples for town' from towns """)

    
    +* you can split complex queries along many lines
    +* you can use *functions* in an SQL query. `COUNT()`, `MIN()`, `MAX()` and `SUM()` are functions. Not at all surprisingly:
    +    * `COUNT()` returns the total number of rows.
    +    * `MIN()` returns the minimum value for the given column.
    +    * `MAX()` returns the maximum value for the given column.
    +    * `SUM()` returns the total of all values for the given column.
    +* you can do *calculations* in your query. e.g. we have calculated the `mean` of peoples per village dividing the `SUM()` by the `COUNT()` values.
    +
    +### Constructing Expressions
    +

    @example spatialite inspect("select (10 - 11) * 2 as Number, ABS((10 - 11) * 2) as AbsoluteValue")

    
    +* the `(10 - 11) * 2` term is an example of an `expression`.
    +* the `ABS()` function returns the *absolute value* of a number.
    +* note that in this example we have not used any DB column or DB table at all.
    +
    +### The HEX() function

    @example spatialite inspect(""" select name, peoples, HEX(Geometry) from Towns where peoples > 350000 order by peoples DESC """)

    
    +* the `HEX()` function returns the hexadecimal representation of a `BLOB` column value.
    +* in the preceding execution of this query, the geom column seemed empty; now, by using the `HEX()` function, we discover that it contains lots of strange binary data.
    +* *geom* contains `GEOMETRY` values, stored as `BLOB`s and encoded in the internal representation used by SpatiaLite.
    +
    +!!! note
    +    
    +    SQLite in its own hasn't the slightest idea of what `GEOMETRY` is, and cannot do any other operation on it. To really use `GEOMETRY` values, it's time use the SpatiaLite extension.
    +
    +## Spatialite Features
    +
    +### Well-Known Text

    @example spatialite inspect(""" SELECT name, peoples, AsText(Geometry) from Towns where peoples > 350000 order by peoples DESC """)

    * the `AsText()` function comes from SpatiaLite, and returns the *Well Known Text - WKT* representation for a `GEOMETRY` column value. WKT is a standard notation conformant to OpenGIS specification.
    +* in the preceding execution of this query, the `HEX()` function returned lots of strange binary data. Now the `AsText()` function shows useful and quite easily understandable `GEOMETRY` values.
    +* a `POINT` is the simplest `GEOMETRY` class, and has only a couple of `[X,Y]` coordinates.
    +
    +### Working with Coordinates

    @example spatialite inspect(""" SELECT name, X(Geometry), Y(Geometry) FROM Towns WHERE peoples > 350000 ORDER BY peoples DESC """)

    * the SpatiaLite `X()` function returns the *X coordinate* for a `POINT`.
    +* the `Y()` function returns the *Y coordinate* for a `POINT`.
    +

    @example spatialite inspect("SELECT HEX(GeomFromText('POINT(10 20)'))")

    
    +### Format Conversions
    +you can use the following `GEOMETRY` format conversion functions:

    @example spatialite inspect("SELECT HEX(AsBinary(GeomFromText('POINT(10 20)')))")

    @example spatialite inspect("SELECT AsText(GeomFromWKB(X'010100000000000000000024400000000000003440'))")

    * the SpatiaLite `GeomFromText()` function returns the internal `BLOB` representation for a `GEOMETRY`.
    +* the `AsBinary()` function returns the *Well Known Binary - WKB* representation for a `GEOMETRY` column value. WKB is a standard notation conformant to OpenGIS specification.
    +* the `GeomFromWKB()` function converts a WKB value into the corresponding internal `BLOB` value.
    +
    +## GEOMETRY Classes
    +
    +### LINESTRING

    @example spatialite inspect("SELECT PKUID, AsText(Geometry) FROM HighWays WHERE PKUID = 10")

    * `LINESTRING` is another `GEOMETRY` class, and has lots of `POINT`s.
    +* in this case you have fetched a very simple `LINESTRING`, representing a polyline with just 4 vertices.
    +* it isn't unusual to encounter `LINESTRING`s with thousands of vertices in real GIS data.
    +

    @example spatialite inspect(""" SELECT PK_UID, NumPoints(Geometry), GLength(Geometry), Dimension(Geometry), GeometryType(Geometry) FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5 """)

    * the SpatiaLite `NumPoints()` function returns the *number of vertices* for a `LINESTRING GEOMETRY`.
    +* the `GLength()` function returns the *geometric length* [expressed in *map units*] for a `LINESTRING GEOMETRY`.
    +* the `Dimension()` function returns the *dimensions'* number for any `GEOMETRY` class [e.g. 1 for lines].
    +* the `GeometryType()` function returns the *class type* for any kind of `GEOMETRY` value.
    +

    @example spatialite inspect(""" SELECT PK_UID, NumPoints(Geometry), AsText(StartPoint(Geometry)), AsText(EndPoint(Geometry)), X(PointN(Geometry, 2)), Y(PointN(Geometry, 2)) FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5 """)

    
    +* the SpatiaLite `StartPoint()` function returns the first `POINT` for a `LINESTRING GEOMETRY`.
    +* the `EndPoint()` function returns the last `POINT` for a `LINESTRING GEOMETRY`.
    +* the `PointN()` function returns the selected vertex as a `POINT`; each one vertex is identified by a relative index. The first vertex is identified by an index value `1`, the second by an index value `2` and so on.
    +* You can freely nest the various SpatiaLite functions, by passing the return value of the inner function as an argument for the outer one.
    +
    +### POLYGON

    @example spatialite inspect("SELECT name, AsText(Geometry) FROM Regions WHERE PK_UID = 52")

    * `POLYGON` is another `GEOMETRY` class.
    +* in this case you have fetched a very simple `POLYGON`, having only the *exterior ring* [i.e. it doesn't contains any internal hole]. Remember that POLYGONs may optionally contain an arbitrary number of *internal holes*, each one delimited by an *interior ring*.
    +* the *exterior ring* in itself is simply a `LINESTRING` [and *interior rings* too are `LINESTRINGS`].
    +* note that a POLYGON is a *closed geometry*, and thus the first and the last POINT for each *ring* are exactly identical.
    +

    @example spatialite inspect(""" SELECT PK_UID, Area(Geometry), AsText(Centroid(Geometry)), Dimension(Geometry), GeometryType(Geometry) FROM Regions ORDER BY Area(Geometry) DESC LIMIT 5 """)

    * we have already meet the SpatiaLite `Dimension()` and `GeometryType()` functions; they works for `POLYGON`s exactly in same fashion as for any other kind of `GEOMETRY`.
    +* the SpatiaLite `Area()` function returns the geometric area [expressed in *square map units*] for a `POLYGON GEOMETRY`.
    +* the `Centroid()` function returns the `POINT` identifying the *centroid* for a `POLYGON GEOMETRY`.
    +

    @example spatialite inspect(""" SELECT PK_UID, NumInteriorRings(Geometry), NumPoints(ExteriorRing(Geometry)), NumPoints(InteriorRingN(Geometry, 1)) FROM regions ORDER BY NumInteriorRings(Geometry) DESC LIMIT 5 """)

    
    +* the SpatiaLite `ExteriorRing()` functions returns the exterior ring for a given `GEOMETRY`. Any valid `POLYGON` must have an *exterior ring*. Remember: each one of the rings belonging to a `POLYGON` is a closed `LINESTRING`.
    +* the SpatiaLite `NumInteriorRings()` function returns the number of interior rings belonging to a `POLYGON`. A valid `POLYGON` may have any number of interior rings, including *zero* i.e. no interior ring at all.
    +* The SpatiaLite `InteriorRingN()` function returns the selected interior rings as a `LINESTRING`; each one interior ring is identified by a relative index. The first interior ring is identified by an index value `1`, the second by an index value `2` and so on.
    +* Any ring is a `LINESTRING`, so we can use the `NumPoints()` function in order to detect the number of related vertices. If we call the `NumPoints()` function on a `NULL GEOMETRY` [or on a `GEOMETRY` of non-`LINESTRING` class] we'll get a `NULL` result. This explains why the the last three rows has a `NULL` `NumPoints()` result; there is no corresponding interior ring!
    +

    @example spatialite inspect(""" SELECT AsText(InteriorRingN(Geometry, 1)), AsText(PointN(InteriorRingN(Geometry, 1), 4)), X(PointN(InteriorRingN(Geometry, 1), 5)), Y(PointN(InteriorRingN(Geometry, 1), 5)) FROM Regions WHERE PK_UID = 55 """)

    * we have already met in the preceding ones the usage of nested functions. For `POLYGON`s it becomes to be a little more tedious, but still easily understandable.
    +* e.g. to obtain the last column we have used `InteriorRingN()` in order to get the first interior ring, and then `PointN()` to get the *fifth* vertex. At last we can call `Y()` to get the coordinate value.
    +

    @example spatialite inspect(""" SELECT Name, AsText(Envelope(Geometry)) FROM Regions LIMIT 5 """)

    * the SpatiaLite `Envelope()` function always returns a `POLYGON` that is the *Minimum Bounding Rectangle - MBR* for the given `GEOMETRY`. Because an MBR is a rectangle, it always has `5 POINT`s [remember: in closed geometries the last POINT must be identical to the first one].
    +* individual `POINT`s are as follows:
    +    * POINT #1: `minX,minY`
    +    * POINT #2: `maxX,minY`
    +    * POINT #3: `maxX,maxY`
    +    * POINT #4: `minX,maxY`
    +    * POINT #5: `minX,minY`
    +* MBRs are of peculiar interest, because by using them you can evaluate spatial relationships between two geometries in a simplified and roughly approximative way. But MBR comparisons are very fast to compute, so they are very useful and widely used to speed up data processing.
    +* MBRs are also widely referenced as *bounding boxes*, or "BBOX" as well.
    +
    +### Complex Geometry Classes
    +`POINT`, `LINESTRING` and `POLYGON` are the elementary classes for `GEOMETRY`. But `GEOMETRY` supports the following complex classes as well:
    +* a `MULTIPOINT` is a collection of two or more `POINT`s belonging to the same entity.
    +* a `MULTILINESTRING` is a collection of two or more `LINESTRING`s.
    +* a `MULTIPOLYGON` is a collection of two or more `POLYGON`s.
    +* a `GEOMETRYCOLLECTION` is an arbitrary collection containing any other kind of geometries.
    +
    +We'll not explain in detail this kind of collections, because it will be simply too boring and dispersive. Generally speaking, they extend in the expected way to their corresponding elementary classes, e.g.
    +* the SpatiaLite `NumGeometries()` function returns the number of elements for a collection.
    +* the `GeometryN()` function returns the *N-th* element for a collection.
    +* the `GLength()` function applied to a `MULTILINESTRING` returns the sum of individual lengths for each `LINESTRING` composing the collection.
    +* the `Area()` function applied to a `MULTIPOLYGON` returns the sum of individual areas for each `POLYGON` in the collection.
    +* the `Centroid()` function returns the *average centroid* when applied to a `MULTIPOLYGON`.
    +=#
    diff --git a/previews/PR441/tables/index.html b/previews/PR441/tables/index.html new file mode 100644 index 00000000..21ca85cb --- /dev/null +++ b/previews/PR441/tables/index.html @@ -0,0 +1,6 @@ + +Tables Interface · ArchGDAL.jl

    Tabular Interface

    ArchGDAL now brings in greater flexibilty in terms of vector data handling via the Tables.jl API. In general, tables are modelled based on feature layers and support multiple geometries per layer. Namely, the layer(s) of a dataset can be converted to DataFrame(s) to perform miscellaneous spatial operations.

    Here is a quick example based on the data/point.geojson dataset:

    dataset = ArchGDAL.read("data/point.geojson")
    +
    +DataFrames.DataFrame(ArchGDAL.getlayer(dataset, 0))
    4×3 DataFrame
    RowFIDpointname
    IGeometr…Float64String
    1Geometry: wkbPoint2.0point-a
    2Geometry: wkbPoint3.0point-b
    3Geometry: wkbPoint0.0a
    4Geometry: wkbPoint3.0b

    To illustrate multiple geometries, here is a second example based on the data/multi_geom.csv dataset:

    dataset1 = ArchGDAL.read("data/multi_geom.csv", options = ["GEOM_POSSIBLE_NAMES=point,linestring", "KEEP_GEOM_COLUMNS=NO"])
    +
    +DataFrames.DataFrame(ArchGDAL.getlayer(dataset1, 0))
    2×5 DataFrame
    Rowpointlinestringidzoomlocation
    IGeometr…IGeometr…StringStringString
    1Geometry: wkbPointGeometry: wkbLineString5.11.0Mumbai
    2Geometry: wkbPointGeometry: wkbLineString5.22.0New Delhi